一、java.io.FIle类

1.特点

(1)凡是与输入、输出相关的类、接口等都定义在java.io包下。

(2)File是一个类,使用构造器创建对象,此对象对应一个文件(.txt .avi .doc .ppt .mp3 .jpg)或文件目录

(3)FIle类对象与平台无关,具有跨平台性

(4)File中的方法,仅涉及到如何创建、删除、重命名等等,如果涉及文件内容的操作,File是无能为力的,必须由io流来实现。

(5)代码示例

import java.io.File;
class Test{
public static void main(String[] args){
File file1 = new File("G:/LSF/java_learn/helloworld.txt");//路径中的/也可以换成\\
File file2 = new File("helloworld.txt");//相对路径,文件放在当前项目下
File file3 = new File("G:\\LSF\\java_learn");//可以对应一个文件目录
}
}

2.File对象的方法

getName():获取文件名

getPath():获取路径

getAbsoluteFile():获取绝对文件名,带着路径

getAbsolutePath():获取绝对路径

getParent():获取上一级的路径

renameTo(File newName):文件对象重命名为newName,路径也随之改变

        File file1 = new File("G:/LSF/java_learn/helloworld.txt");//路径中的/也可以换成\\。
File file2 = new File("helloworld2.txt"); System.out.println(file1.getName());//helloworld.txt
System.out.println(file1.getPath());//G:\LSF\java_learn\helloworld.txt
System.out.println(file1.getAbsoluteFile());//G:\LSF\java_learn\helloworld.txt
System.out.println(file1.getAbsolutePath());//G:\LSF\java_learn\helloworld.txt
System.out.println(file1.getParent());//G:\LSF\java_learn //file1.renameTo(file2):file1重命名为file2,要求是file1文件真实存在,file2文件不存在。重命名后原路径找不到file1,file1跑到了file2路径下
boolean b = file1.renameTo(file2);
System.out.println(b);//返回true

exists():判断对象是否存在

canWrite():判断是否能写入

canRead():判断是否能读取

isFile():判断是否是文件

isDirectory():判断是否是文件目录

lastModified():返回最后一次修改的时间

length():返回文件内容的字符长度

        System.out.println(file1.exists());//true
System.out.println(file1.canWrite());//true
System.out.println(file1.canRead());//true
System.out.println(file1.isFile());//true
System.out.println(file1.isDirectory());//false
System.out.println(new Date(file1.lastModified()));//Sun Mar 17 14:37:31 CST 2019
System.out.println(file1.length());//7,文件内容是”abcdefg“

createNewFile():若对象文件不存在,创建该文件

delete():删除对象对应的文件

mkdir():创建一个文件目录,只有在上层文件目录存在的情况下才能创建成功

mkdirs():创建一个文件目录,若上层文件目录不存在,都创建出来

list():以字符串数组的形式返回对象文件目录下的所有文件名

listFiles():以文件数组的形式返回对象文件目录下的所有文件对象

        File file1 = new File("G:\\LSF\\java_learn\\helloworld.txt");
System.out.println(file1.delete());//true if(!file1.exists()){
boolean b = file1.createNewFile();
System.out.println(b);//true
} File file2 = new File("G:\\LSF\\abc");
if(!file2.exists()){
boolean b = file2.mkdir();//若LSF目录不存在,返回false;需要使用mkdirs()去创建
System.out.println(b);//true
} File file3 = new File("G:\\LSF\\java_learn");
String[] strs = file3.list();
for(int i = ;i < strs.length;i++){
System.out.println(strs[i]);
} File[] files = file3.listFiles();
for(int i = ;i < files.length;i++){
System.out.println(files[i].getName());
}

二、IO流

1.概述

IO流用来处理设备间的数据传输。java.io包下提供了各种“流”类和接口,用来获取不同种类的数据,并通过标准的方法输入和输出数据。

输入input:读取外部数据(磁盘、光盘等存储设备的数据)到程序(内存)中。

输出output:将程序(内存)数据读取到磁光盘等存储设备中。

2.流的分类

(1)

按操作数据单位不同分为:字节流(8 bit)、字符流(16 bit)

按数据流向不同分为:输入流、输出流

按流的角色不同分为:节点流(文件流)、处理流

(2)

抽象基类  字节流    字符流

输入流  InputStream    Reader

输出流  OutputStream    Writer

Java的IO流共涉及40多个类,实际上非常规则,都是从上面四个抽象基类派生出来的。

由这四个类派生出来的子类名称都是以其父类名作为子类名后缀。

3.IO的体系

抽象基类          节点流(文件流)        缓冲流(处理流的一种)

InputStream         FileInputStream         BufferedInputStream

OutputStream        FileOutputStream       BufferedOutputStream (flush())

Reader             FileReader              BufferedReader     (readline())

Writer              FileWriter           BufferedWriter    (flush())

4.FileInputStream的使用

        //从硬盘中存在的一个文件,读取其内容到程序中,使用FileInputStream
//使用try-catch的方式处理异常保证文件流的关闭;如果直接throws异常,可能导致文件流没有关闭。
FileInputStream fis = null;
try{
//1.创建一个File类对象
File file1 = new File("helloworld.txt");
//2.创建一个FileInputStream类的对象
fis = new FileInputStream(file1);
//3.调用FileInputStream的方法,实现File文件的读取
//read():读取文件的一个字节,当执行到文件结尾时返回-1
int b;
while((b=fis.read()) != -){
System.out.print((char)b);//输出abcdefg
}
}catch(IOException e){
e.printStackTrace();
}finally{
//4.关闭流
if(fis != null){
try{
fis.close();
}catch(IOException e){
e.printStackTrace();
}
}
}

一个read读取多个字节的方法:FileInputStream类的read(byte[] b)方法,详见代码:

            byte[] b = new byte[];//将读取到的数据放入这个数组,数组长度为每次读取数据的最大长度
int len;//每次读入到数组中的实际字节长度
while((len = fis.read(b)) != -){//FileInputStream类中重写了read方法,可以传入一个byte数组类型的形参,返回值是传入数组的字节长度,若读取结束,返回-1
for(int i = ;i < len;i++){
System.out.print((char)b[i]);
}
}

5.FileOutputStream的使用

        //往硬盘中的文件写入数据,使用FileOutputStream
//1.创建一个File类对象
//输出的物理文件可以不存在,执行过程中会自动创建;若已经存在,会把原有的数据覆盖掉。
File file = new File("helloworld2.txt");
//2.创建一个FileOutputStream类的对象
FileOutputStream fos = null;
try{
fos = new FileOutputStream(file);
//3.写入操作
fos.write(new String("The destination is stars and seas!").getBytes());//调用String的getBytes方法转换成字节类型
}catch(IOException e){
e.printStackTrace();
}finally{
//4.关闭流
if(fos != null){
try{
fos.close();
}catch(IOException e){
e.printStackTrace();
}
}
}

复制文件的方法(不只是文本文件,视频文件、音频文件、图片也可以)

        //从硬盘读出一个文件,并写入另一个位置。(相当于文件的复制)
File file1 = new File("helloworld2.txt");
File file2 = new File("helloworld3.txt");
FileOutputStream fos = null;
FileInputStream fis = null;
try{
fis = new FileInputStream(file1);
fos = new FileOutputStream(file2); byte[] b = new byte[];//长度自行斟酌
int len;
while((len = fis.read(b)) != -){
//错误的写法:fos.write(b);或者fos.write(b,0,b.length);
fos.write(b,,len);//写入b数组的从第0个到第len个数据
}
}catch(IOException e){
e.printStackTrace();
}finally{
//关闭流
if(fis != null){
try{
fis.close();
}catch(IOException e){
e.printStackTrace();
}
}
if(fos != null){
try{
fos.close();
}catch(IOException e){
e.printStackTrace();
}
}
}

6.FileReader、FileWriter的使用

(1)基本操作和FileInputStream基本相同,只是处理数据的单位是字符。

(2)对于非文本文件(视频文件、音频文件、图片),只能使用字节流!

Java语法基础学习DayFourteen(IO)的更多相关文章

  1. Java语法基础学习DayFifteen(IO续)

    一.缓冲流(处理流的一种) 1.作用:可以提高文件操作的效率 2.使用BufferedInputStream和BufferedOutputStream实现非文本文件的复制 特点:flush()方法 代 ...

  2. Java语法基础学习DayTwentyOne(网络编程)

    一.IP地址和端口号 1.作用 通过IP地址,唯一的定位互联网上一台主机. 端口号标识正在计算机上运行的进程,不同进程有不同的端口号,被规定为一个16位的整数0~65535,其中0~1023被预先定义 ...

  3. Java语法基础学习DayEighteen(常用类)

    一.String类 1.特点 String代表不可变的字符序列,底层用char[]存放. String是final的. 2.内存解析 3.常用方法 int length() char charAt(i ...

  4. Java语法基础学习DaySeven

    ---恢复内容开始--- 一.包装类——Wrapper 1.定义:针对八种基本数据类型定义相应的引用类型——包装类(封装类) boolean——Boolean          byte——Byte ...

  5. Java语法基础学习DaySix

    一.JavaBean——可重用组件 1.JavaBean是指符合以下标准的Java类: (1)类是公共的 (2)有一个无参的公共的构造器 (3)有属性,且有对应的get.set方法 2.好处 用户可以 ...

  6. Java语法基础学习DayThree

    一.流程控制语句补充 1.switch语句 格式: switch(表达式) { case 值1: 语句体1; break; case 值2: 语句体2; break; ... default: 语句体 ...

  7. Java语法基础学习DayTwenty(反射机制续)

    一.Java动态代理 1.代理设计模式的原理 使用一个代理将对象包装起来, 然后用该代理对象取代原始对象. 任何对原始对象的调用都要通过代理. 代理对象决定是否以及何时将方法调用转到原始对象上. 2. ...

  8. Java语法基础学习DayNineteen(反射机制)

    一.Refection定义 1.概述 Reflection(反射)是被视为动态语言的关键,反射机制允许程序在执行期借助于Reflection API取得任何类的内部信息,并能直接操作任意对象的内部属性 ...

  9. Java语法基础学习DaySeventeen(多线程续)

    一.线程的特点 1.线程的分类 java中的线程分为两类:守护线程和用户线程.唯一的区别是判断JVM何时离开. 守护线程是用来服务用户线程的,通过在start()方法前调用Thread.setDaem ...

随机推荐

  1. 【转】jira插件Zephyr的具体使用

    在工作中,我们通常是在excel表格中编写测试用例,增删改查功能都不错,但保存.管理.共享都不完美,为了让公司领导或其他同事方便查看测试执行情况和测试进度,我们引入了TestLink工具来编写测试用例 ...

  2. win10安装JDK

    1.下载 首先,在官网下载 JDK:Oracle 官网 如上图所示,在 Oracle 官网下载 JDK,有一点需要注意,那就是在咱们下载合适的 JDK 之前,需要先点击“标记1”所在的按钮,选择接受. ...

  3. vue移动端金融UI组件库滴滴MandMobile面向金融场景设计附功能思维导图

    vue移动端金融UI组件库滴滴MandMobile面向金融场景设计附功能思维导图 Mand Mobile是面向金融场景设计的移动端组件库,基于Vue.js实现.目前已实际应用于滴滴四大金融业务板块的1 ...

  4. Docker Overlay 工作原理

    Docker 原生Overlay 网络工作流程 如图:有两个Container 独立的容器节点.他们通过Overlay网路进行通信. 网卡设备 Container eth0:eth0它是Overlay ...

  5. UI自动化(十一)selenium框架

    框架(提供一个好的解决方案给其他人用) webUi自动化框架 弊端:代码维护难,定位问题复杂,稳定性 PageObject分层:将一个页面抽象成一个类,将这个页面下的可操作性的功能点,当做这个类下的函 ...

  6. Python制作AI贪吃蛇

    前提:本文实现AI贪吃蛇自行对战,加上人机对战,文章末尾附上源代码以及各位大佬的链接,还有一些实现步骤,读者可再次基础上自行添加电脑VS电脑和玩家VS玩家(其实把人机对战写完,这2个都没什么了,思路都 ...

  7. EJB到底是什么?

    EJB到底是什么?   1. 我们不禁要问,什么是"服务集群"?什么是"企业级开发"? 既然说了EJB 是为了"服务集群"和"企业 ...

  8. Learning-Python【17】:包的导入使用

    在同一级目录下新建 p1.py 和 run.py,添加代码 # p1.py 模块的设计者 def f1(): print("from f1") def f2(): print(&q ...

  9. python腾讯语音合成

    一.腾讯语音合成介绍 腾讯云语音合成技术(TTS)可以将任意文本转化为语音,实现让机器和应用张口说话. 腾讯TTS技术可以应用到很多场景,比如,移动APP语音播报新闻:智能设备语音提醒:依靠网上现有节 ...

  10. jsp/servlet学习一之servlet初窥

    Java Servlet技术简称Servlet技术,是java开发web应用的底层技术.Servlet是一个java程序,一个servlet应用有一个或多个Servlet程序.jsp页面会被转换和编译 ...