java中的io流
Java中通过 java.io.File 类来对⼀个⽂件(包括⽬录)进⾏抽象的描述。注意,有File对象, 并不代表真实存在该⽂件。
1.File类
1.1属性
1.2构造方法
一个File对象就表示一个硬盘上的文件,
在构造方法时就需要将这个文件路径写进去
主要选择第二种
1.3方法
1.3.1返回文件信息
报错一般是程序怕传入的文件不存在
声明一下异常就行了
1.3.2对文件的判断和创建
import java.io.File;
import java.io.IOException;public class Test {public static void main(String[] args) throws IOException {File file=new File("d:\\test.txt");//这个文件是不存在的//1.boolean exists()判断File对象描述的⽂件是否真实存在System.out.println(file.exists());//2.boolean isDirectory()判断File对象代表的⽂件是否是⼀个目录(是否是个文件夹)System.out.println(file.isDirectory());File file1=new File("d:");System.out.println(file1.isDirectory());//3.boolean isFile()判断File对象代表的⽂件是否是⼀个普通文件System.out.println(file.isFile());//4.boolean createNewFile()根据File对象,⾃动创建⼀个空⽂件,成功创建后返回trueSystem.out.println(file.createNewFile());//1.boolean exists()判断File对象描述的⽂件是否真实存在System.out.println(file.exists());//2.boolean isDirectory()判断File对象代表的⽂件是否是⼀个目录(是否是个文件夹)System.out.println(file.isDirectory());//3.boolean isFile()判断File对象代表的⽂件是否是⼀个普通文件System.out.println(file.isFile());//5. boolean delete()根据File对象,删除该⽂件。成功删除后返回trueSystem.out.println(file.delete());}
}
创建新文件,一开始是没有的
运行以后
删除文件运行以后
1.3.3对文件的删除
1.3.4对目录信息的获取
1.3.4对目录的创建
1.创建单个文件夹
2.创建多层文件夹
1.3.5对文件进行改名
程序执行之前
程序执行之后
注意不同类型之间的文件也能进行修改,也会将文件的类型进行改变
1.3.6对文件访问的权限
2.文件内容的读写--数据流
2.1字符流
2.1.1Reader
Reader是一个抽象类,不能new实例,只能new子类
read主要有三个方法
注意文件操作完记得对文件进行close
有可能前面的程序发生异常,后面的close就会执行不到,所以可以这样写
也可以这样
try with resources
这个语法目的就是
()中定义的变量
会在代码快结束时,自动地调用close方法(无论是正常进行还是抛出了异常)
2.1.1.1无参read
无参read(),一次就读取一个字符
结果
2.1.1.2char【】参数的read
系统会尽量读满这个数组,如果文件中的数据超出了数组的大小,就会重复的的填满这个数组。
三个参数的read,一次的去若干个字符,会把参数执行的cbuf数组中,中的从off这个位置开始,到len这个长度的范围,尽量填满
2.1.2FileWriter
创建OutputStream 对象完成后,就可以使用下面的方法来写入流或者进行其他的流操作。
构造方法
FileWriter(File file)FileWriter(File file, boolean append)
参数:
- file:要写入数据的 File 对象。
- append:如果 append 参数为 true,则将字节写入文件末尾处,相当于追加信息。如果 append 参数为 false, 则写入文件开始处。
2.2字节流
2.2.1InputStream 概述
2.2.1.1FileInputStream 概述
该流用于从文件读取数据,它的对象可以用关键字 new 来创建。
有多种构造方法可用来创建对象。
可以使用字符串类型的文件名来创建一个输入流对象来读取文件:
可以使用字符串类型的文件名来创建一个输入流对象来读取文件:
也可以使用一个文件对象来创建一个输入流对象来读取文件。我们首先得使用 File() 方法来创建一个文件对象:
InputStream f = new FileInputStream("C:/java/hello");File f = new File("C:/java/hello");
InputStream in = new FileInputStream(f);
下面这些就是返回的是ascii码值
2.2.2OutputStream概述
2.2.2.1FileOutoutStream概述
该类用来创建一个文件并向文件中写数据。
如果该流在打开文件进行输出前,目标文件不存在,那么该流会创建该文件。
有两个构造方法可以用来创建 FileOutputStream 对象。
1.使用字符串类型的文件名来创建一个输出流对象:
OutputStream f = new FileOutputStream("C:/java/hello")
2.也可以使用一个文件对象来创建一个输出流来写文件。我们首先得使用File()方法来创建一个文件对象:
File f = new File("C:/java/hello");
OutputStream fOut = new FileOutputStream(f);’
2.3缓冲流
2.3.1字节缓冲流
BufferedInputStream、BufferedOutputStream(缓冲字节流)
public class IOTest {public static void write(File file) throws IOException {// 缓冲字节流,提高了效率BufferedOutputStream bis = new BufferedOutputStream(new FileOutputStream(file, true));// 要写入的字符串String string = "综上所述,轮廓系数是一种有效的评估K-means聚类效果的度量指标。通过计算每个样本点的轮廓系数并取平均值,可以直观地了解聚类效果的好坏,并为优化聚类算法提供指导。";// 写入文件bis.write(string.getBytes());// 关闭流bis.close();}public static String read(File file) throws IOException {BufferedInputStream fis = new BufferedInputStream(new FileInputStream(file));// 一次性取多少个字节byte[] bytes = new byte[1024];// 用来接收读取的字节数组StringBuilder sb = new StringBuilder();// 读取到的字节数组长度,为-1时表示没有数据int length = 0;// 循环取数据while ((length = fis.read(bytes)) != -1) {// 将读取的内容转换成字符串sb.append(new String(bytes, 0, length));}// 关闭流fis.close();return sb.toString();}
}
2.3.2字符缓冲流
BufferedReader、BufferedWriter(字符缓冲流)
public class IOTest {public static void write(File file) throws IOException {// BufferedWriter fw = new BufferedWriter(new OutputStreamWriter(new// FileOutputStream(file, true), "UTF-8"));// FileWriter可以大幅度简化代码BufferedWriter bw = new BufferedWriter(new FileWriter(file, true));// 要写入的字符串String string = "Java 在 UNIX 和 Windows 自动按约定分辨文件路径分隔符。如果你在 Windows 版本的 Java 中使用分隔符 (/) ,路径依然能够被正确解析。";bw.write(string);bw.close();}public static String read(File file) throws IOException {BufferedReader br = new BufferedReader(new FileReader(file));// 用来接收读取的字节数组StringBuilder sb = new StringBuilder();// 按行读数据String line;// 循环取数据while ((line = br.readLine()) != null) {// 将读取的内容转换成字符串sb.append(line);}// 关闭流br.close();return sb.toString();}
}