Java高级特性:IO

字节流

File类是描述文件和文件夹的,并且其中定义的方法都是围绕文件和文件夹的操作展开的,但是File类有缺陷,

它无法去获取一个文件中的数据,如果我们在程序中要读取文件中存放的具体的数据,或者给文件中写数据,

这时必须使用Java中提供的IO流技术来读取:

字节流输入:InputStream 从文件到内存是输入流

字节流输出:OutputStream 从内存到文件是输出流

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0xfe63wS-1650899318026)(C:\Users\26017\AppData\Roaming\Typora\typora-user-images\image-20220425201713161.png)]

package int_out;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;

public class Demo{
	public static void main(String[] args ) throws Exception{
//		字节流输入和输出:操作英文单词
//		将Bandzip文件夹中的hi.txt文件取出到程序中
		File file = new File("D:/Bandzip/hi.txt");
//		字节流输入
		InputStream input = new FileInputStream(file);
		
//		一次读取一个,文件读完返回-1
		int nub = input.read();	
		System.out.println((char)nub);
		
//		一次读取多个
		byte[] buf = new byte[512];
//		用来存储
		int len = -1;
		String s = "";
		while ((len = input.read(buf)) != -1) {
			s += new String(buf);
			System.out.println(s);	
		}
		
//		输出
		File files = new File("D:/Bandzip/hii.txt");
//		字节流输出
//		(files,true):追加文件,不会覆盖原本就有的文件
		OutputStream out = new FileOutputStream(files,true);
//		将字符串转换成字节数组
		byte[] ss = s.getBytes();
//		将内存中的数据输出到硬盘文件中
		out.write(ss);
//		刷新,将缓冲区的文件刷到文件中
		out.flush();
//		关闭流,释放资源前会刷出,再释放
		out.close();

		System.out.println("over");	
	}
}

flush和close什么区别:

flush是把缓冲区的数据刷出到文件中,没有关闭流和文件之间的关联,在刷新之后,依然可以使用流对象继续

给文件中写数据。

close方法在关闭流之前会先调用flush把缓冲区中的数据写底层文件中,然后把流和文件的关联关系断开。

一旦调用的close方法,流就已经被关闭了,就无法在使用当前这个流对象写数据。

字符流

Java给我们提供专门用于操作字符数据的流对象

字符输入流:Reader

字符输出流:Writer

package int_out;

import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class Demo1 {
	public static void main(String[] args) throws Exception {
//		字符流输入和输入:操作汉字
//		获取输入文件的地址
//		将Bandzip文件夹中的hi.txt文件取出到程序中
		File file = new File("D:/Bandzip/hi.txt");
//		字符流输入
		FileReader reader = new FileReader(file);
//		通过循环取出文件中的数据
		int c = -1;
		String str = "";
		while ((c = reader.read()) != -1) {
			str = ""+(char)c;
			System.out.print(str);
		}
		
//		获取输出文件的地址
		File files = new File("D:/Bandzip/hii.txt");
//		字符流输出
		FileWriter writer = new FileWriter(files,true);
		
		String name = "lili";
		String pass = "123";
//		将数据传到文件中
		writer.write(name);
		writer.write(pass);
//		将数据从缓冲区刷到文件
		writer.flush();
		
		System.out.println("over");	
	}
}

DataInputStream

在IO包中提供了两个与平台无关的数据操作流

数据输出流:DataOutputStream

数据输入流:DataInputStream

package homework;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;

public class Jpg {
	public static void main(String[] args) throws Exception {
//		复制图片
//		获取到输入和输出图片的地址
		File file = new File("D:/Bandzip/jpg/tu.jpg");
		File files = new File("D:/Bandzip/jpg/tus.jpg");
		
//		导入图片
		InputStream in = new FileInputStream(file);
		DataInputStream dis = new DataInputStream(in);
//		导出图片
		OutputStream out = new FileOutputStream(files);
		DataOutputStream dos = new DataOutputStream(out);
		
//		存储图片
		int i = -1;
//		将获取到的图片存到i
		while ((i = dis.read()) != -1) {
//			将i获得的图片输出
			dos.write(i);
			dos.flush();
		}
		
//		关闭流
		dos.close();
		out.close();
		dis.close();
		in.close();
		System.out.println("over");
		
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值