java第十一课 IO流

目录

1.IO流介绍

2.File文件的使用

3.字节流

4.字符流

5.字符缓冲流

6.转换流


1.IO流介绍

IO(Input/Output)是计算机输入/输出的接口。Java的核心库java.io提供了全方面的IO接口,包括:文件系统的操作,文件读写,标准设备输出等等

2.File文件的使用

常用构造方法:File("文件或者目录的路径");

public String getName() //获取文件名称
public String getParent() //返回上一级目录的路径
public File getParentFile()//返回上一级目录的文件对象
public String getAbsolutePath()//返回绝对路径
public boolean exists()//文件是否存在  存在返回true  不存在 返回false
Public File[] listFiles()//获取所有的子目录集合
public boolean isDirectory()//是否为目录
public boolean isFile()//是否为文件
public long length()//返回文件的大小  (单位:字节)
boolean delete()//删除文件 或者空文件夹
boolean mkdir()//创建文件夹
boolean createNewFile()//创建新文件

3.字节流

多用于读取图片或者声音

  • .InputStream是定义了字节输入流的抽象类  读取文件中的数据
  • .OutputStream 是定义了字节输出流的抽象类 往文件中写数据
	static String path="file/tt.txt";
	static String data="大家好,我是American!!!\r\n";
	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
		byteWrite(path,data);
		byteRead("file/tt.txt");
		//byteCopyFile("file1/1.jpg", "file1/3副本.jpg");
	}
	/**
	 * 字节流 往文件中写数据  
	 * @param path2 文件相对路径
	 * @param data2 是要写入到文件的数据
	 * @throws IOException 
	 */
	private static void byteWrite(String path2, String data2) throws IOException {
		// TODO Auto-generated method stub
		//第二个参数为 true  数据将会逐后添加  不会覆盖    false 覆盖原先的内容
				OutputStream write=new FileOutputStream(path,true);
				//2.将数据转换成字节数组
				byte[] bs=data.getBytes();
				//3.将字节流数组写入文件
				write.write(bs);
				//4.关闭资源
				write.close();
				
	}
	/**
	 * 读取字节 每次读取1024个字节
	 * @param string
	 * @throws IOException
	 */
	private static void byteRead(String string) throws IOException {
		// TODO Auto-generated method stub
		String str="";
		//1.创建读取文件的输入流对象
		InputStream ins=new FileInputStream(path);
		//一次性读 512/1024个字节  效率比较高
		//将文件中读到的数据保存在字节数组中
		byte[] bs=new byte[1024];
		//每循环一次就是读一次  读不到数据  返回-1
		//ins.read(bs):返回读到的真实的字节数
		while(ins.read(bs)!=-1){
			str=str+new String(bs);
		}
		System.out.println(str.trim());
	}
	/**
	 * 将1.jpg复制粘贴一份至相应目录下(1副本.jpg)
	 * @param string 源文件路径
	 * @param string2 粘贴的路径
	 * @throws IOException 
	 */
	private static void byteCopyFile(String string, String string2) throws IOException {
		// TODO Auto-generated method stub
		//1,创建读取源文件的内容 的输入流对象 (inpit...)
				InputStream ins=new FileInputStream(string);
				//2.创建写入新文件的   输出流对象(output...)
				OutputStream out=new FileOutputStream(string2,true);
				//3.定义字节数组保存读取到的内容
				byte[] bs=new byte[1024];
				int temp=-1;
				//4.循环读取文件中的内容  然后将读取到的内容写入新文件
				while((temp=ins.read(bs))!=-1){
					out.write(bs,0,temp);
				}
				//5.释放资源
				out.close();
				ins.close();
	}

4.字符流

字节流提供处理任何类型输入/输出操作的足够功能,但不能直接操作Unicode字符,因而需要字符流。

字符流层次结构的顶层是Reader 和Writer 抽象类

  • .Writer 是定义流式字符输出的抽象类
  • Reader是定义Java的流式字符输入模式的抽象类
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Reader;
import java.io.Writer;

public class CharStreamTest {

	public static void main(String[] args) throws Exception {
		// TODO Auto-generated method stub
		charWriter("file1/char.txt","我charles-123\r\n");
				charReader("file1/char.txt");
		charCopyFile("file1/char.txt","file1/char副本.txt");
	}
/**
 * 过字符 输出流  往指定文件中写数据
 * @param string 文件路径
 * @param string2 内容
 * @throws IOException 
 */
	private static void charWriter(String string, String string2) throws IOException {
		// TODO Auto-generated method stub
		Writer out=new FileWriter(string, true);
		//将数据转化成字符数组
		char[] cs=string2.toCharArray();
		//将数据写入指定的文件中
		out.write(cs);
		out.close();
		
	}

	private static void charReader(String string) throws IOException {
		// TODO Auto-generated method stub
		//1.创建字符输入流对象
		String str="";
		Reader rd=new FileReader(string);
		char[] cs=new char[1024];
		//2.读取文件中的数据
		while(rd.read(cs)!=-1){
			str=str+new String(cs);
		}
		//System.out.println(str.trim());
		String[] strs=str.trim().split("\r\n");
		System.out.println(strs[2]);
		//3.释放资源
		rd.close();
	}

	private static void charCopyFile(String string, String string2) throws Exception {
		// TODO Auto-generated method stub
		Reader rd=new FileReader(string);
		Writer wt=new FileWriter(string2);
		char[] cs=new char[1024];
		int temp=-1;
		while((temp=rd.read(cs))!=-1){
			wt.write(cs,0,temp);
		}
		//释放资源
		wt.close();
		rd.close();
	}
}

5.字符缓冲流

  • BufferedReader 通过缓冲输入提高性能
  • BufferedWriter通过缓冲输出提高性能
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Reader;
import java.io.Writer;

public class BufferedCharStreamTest {

	public static void main(String[] args) throws Exception {
		// TODO Auto-generated method stub
		buffWriter("file1/buffer.txt", "字符串缓冲流好啊\r\n");
		buffReader("file1/buffer.txt");
	}

	/**
	 * 1.字符缓冲流 写入数据
	 * 
	 * @param string  地址
	 * @param string2 数据
	 * @throws IOException
	 */
	private static void buffWriter(String string, String string2) throws IOException {
		// TODO Auto-generated method stub
		// 1.创建字符输出流对象 writer
		Writer writer = new FileWriter(string, true);
		// 2.创建字符输出缓冲流对象
		BufferedWriter bfw = new BufferedWriter(writer);
		// 3.将数据写入缓冲区
		bfw.write(string2);
		bfw.flush();
		bfw.close();
		writer.close();
	}

	/**
	 * 
	 * @param string 文件数据
	 * @throws Exception
	 */
	private static void buffReader(String string) throws Exception {
		// TODO Auto-generated method stub
		String str = " ";
		Reader reader = new FileReader(string);
		BufferedReader bufread = new BufferedReader(reader);
		String temp = null;
		while ((temp = bufread.readLine()) != null) {
			str = str + temp + "\r\n";
		}
		System.out.println(str);
		bufread.close();
		reader.close();
	}
}

6.转换流

转换流是指将字节流与字符流之间的转换。转换流的出现方便了对文件的读写,她在字符流与字节流之间架起了一座桥梁,使原本毫无关联的两种流操作能够进行转化,提高了程 序的灵活性。字节流中的数据都是字符时,转成字符流操作更高效。

  • InputStreamReader 
  • OutputStreamWriter
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;

/**
 * 字节流转换成字符流
 * @author 51361
 *
 */
public class ByteToCharStreamTest {
	public static void main(String[] args) throws Exception {
		write("file1/test.txt","你好 I am American\r\n");
		reader("file1/test.txt");
	}

	private static void reader(String path) throws IOException {
		// TODO Auto-generated method stub
		String str="";
		//1.创建字节输入流  读取文件的
 		InputStream ins=new FileInputStream(path);
		//2.将字节输入流转换成  对应 字符输入流
 		InputStreamReader inrd=new InputStreamReader(ins);
 		char[] cs=new char[1024];
 		while(inrd.read(cs)!=-1){
 			str=str+new String(cs);
 		}
 		System.out.println(str.trim());
 		//3.释放资源
 		inrd.close();
 		ins.close();
	}

	private static void write(String path, String data) throws Exception {
		// TODO Auto-generated method stub
		//1.创建字节输出流 对象
				OutputStream out=new FileOutputStream(path,true);
				//2.将字节流转换成字符流
				OutputStreamWriter osw=new OutputStreamWriter(out);
				//3.将数据转换成字符数组
				char[] cs=data.toCharArray();
				//4.通过字符流将字符数组写入文件
				osw.write(cs);
				//5.释放资源
				osw.close();
				out.close();
	}

}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值