Java高级特性:IO

Java高级特性:IO,第1张

字节流

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

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

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

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

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

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");
		
	}
}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/738424.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-28
下一篇 2022-04-28

发表评论

登录后才能评论

评论列表(0条)

保存