Java I/O流的简单使用

1.File类的使用

1.1 常用构造器Flie(String pathname), 其中pathname表示以字符串的形式传入一个文件或者文件夹的绝对(相对)路径

1.2 代码演示:

package Input_Output;

import java.io.File;
import java.io.IOException;

// File类的使用(无法查看文件的具体内容)
public class IO_file {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		File file = new File("D:\\test_two");
		System.out.println("文件或者目录是否存在:" + file.exists());
		System.out.println("是文件吗:" + file.isFile());
		System.out.println("是目录吗:" + file.isDirectory());
		System.out.println("名称:" + file.getName());
		System.out.println("路径:" + file.getPath());
		System.out.println("绝对路径:" + file.getAbsolutePath());
		try {
			System.out.println("绝对路径规范表示:" + file.getCanonicalPath()) ;
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		System.out.println("最后修改的时间" + file.lastModified()) ;
		System.out.println("文件大小" + file.length()) ;
		System.out.println(file.list());
		System.out.println(file.listFiles());

	}

}

1.3 代码运行显示
在这里插入图片描述
1.4 注意问题
File类里面封装的方法只是基本地对文件(文件夹)进行增删改查的操作,无法对文件(文件夹)里面的内容进行操作。

2.抽象流类

2.1 Java SE API 所提供的流类位于java.io包中,都分别继承自4种抽象流类,这四种流类分别如下:
在这里插入图片描述
2.1.1 InputStream继承层次:
在这里插入图片描述
2.1.2 OutputStream继承层次
在这里插入图片描述
在这里插入图片描述
2.1.3 Reader 继承层次
在这里插入图片描述
2.1.4 Writer 继承层次
在这里插入图片描述

3. 文件流具体实现类的使用

3.1 FileInputStream的使用
3.1.1 主要实现代码:
1)FileInputStream file = new FileInputStream(“文件路径”); // 创建一个FileInputStream对象
2)System.out.println(file.available()); // 调用file的available()方法查看可以读取的字节数
3)// 用file.read()方法返回以一个字节为单位编码的数值(int型),当读取完这个文件的时候,返回值为-1
for(int b; (b=file.read()) != -1;){ System.out.print((char)b); // 强制转换成为char型,对应使用ASCII编码编译
}
4) 注意事项:
整个过程中始终要抛出IOException异常
使用finally关键字执行file.close()方法关闭输入流(当然在执行close操作的时候也要抛出IOException异常)
当读取的文件有中文的时候,读出来的字符会乱码(因为中文至少是两个字节编码的)
3.2 FileOutputStream的使用
3.2.1 主要实现代码
1)FileOutputStream file = new FileOutputStream(“文件路径”, true);创建一个FileOutputStream对象(第二个参数表示打开追加模式来添加字节)
2)file.write(“向文件中添加的数据”.getBytes()) // 注意这里要使用getBytes()方法将字符串转换成为二进制数组的形式写入文件(其实这里只是将要写入的数据放在了一个缓冲池里面)
3)file.fush() 使用这个方法将缓冲池的数据写入到文件
4) 注意事项:
整个过程中始终要抛出IOException异常
使用finally关键字执行file.close()方法关闭输入流(当然在执行close操作的时候也要抛出IOException异常)
当读取的文件有中文的时候,读出来的字符会乱码(因为中文至少是两个字节编码的)
3.3 FileReader和FileWrite的使用
3.3.1 实现代码:

// FileReader和 FileWrite的使用
public class Reader {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		FileReader fr = null;   // 这里一定要先创建对象,方便下面的局部代码块调用
		FileWriter fw = null;
		try {
			// 创建字符流对象
			fr = new FileReader("D:\\test1.txt");
			fw = new FileWriter("D:\\test2.txt");
			char[] cbuf = new char[8192];  // 创建一个8192长度的字符数组,用来存储读到的数据
			for(int count=-1; (count = fr.read(cbuf))!=-1;){
				fw.write(cbuf, 0, count);//参数说明:count得到的是一个读取字符的个数。Wtiter()里面的参数表示写入数组cbuf中从0到num的数据
				
				fw.flush();
			}
		} catch (IOException e) {
			// TODO: handle exception
			e.printStackTrace();
		}finally {
			try {
				fr.close();
				fw.close();
			} catch (IOException e2) {
				// TODO: handle exception
				e2.printStackTrace();
			}
			
		}
	}

}

3.4缓冲流的使用

3.4.1 作用:为了提高数据读写的速度,通过使用带缓冲功能的流类时,它会创建一个内部缓冲区数组作为数据操作的一个中转站,等用户数据操作完成之后,在一次性的操作对应的文件,减少CPU的负担。
3.4.2 缓冲流的类型
在这里插入图片描述
3.3 缓冲流的基本使用
构造器里面的参数是对应的I/O流对象,拥有readLine()方法,可以按行返回数据,当读取完文件数据的时候,返回null,需要注意的是,按行读取的时候,不会再有源文件的换行符,一般需要程序员自己通过newLine()方法写入换行符。(jdk1.8的我发现没有readLine()方法)。

4.总结

除此之外,还有相关的转换流、数据流、打印流、对象流,这里不一一记录,以后用的着的时候可以查看相关的文档。

猜你喜欢

转载自blog.csdn.net/weixin_43967401/article/details/106393098
今日推荐