IO流小结(学习更新中)

Io流

流是指一连串流动的字符,是以先进先出的方式发送信息的通道

总结:(写在前面)
java流的分类

按流向区分:

输出流输入流
OutputerStream 和Writer作为基类InputStream和Reader作为基类

按照处理数据单元划分:

字节流字符流
字节输入流InputStream字符输入流Reader
字节输出流OutputStream字符输出流Writer
可以处理所有文件,但在处理字符上速度不如字符流只能处理字符流,但是速度很快
有关文件的操作(类File)

常见操作方法:
在这里插入图片描述

package Day16_Test;

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

public class FileTest {

	
	public static void main(String[] args) {
		
		File file = new File("D:\\a.txt");
		
		System.out.println("判断文件是否存在"+file.exists());
		if (!file.exists()) {
			
			if (!file.isFile()) {//错误的判断方式,仅展示创建文件目录
				try {
					boolean flag = file.createNewFile();
					if (flag) {
						System.out.println("文件创建成功");
					} else {
						System.out.println("失败");
					}
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				} 
			}else {//如果接受的是目录
				boolean flag = file.mkdirs();
				if (flag) {
					System.out.println("路径创建成功");
				}else {
					System.out.println("路径创建失败");
				}
			}
			
			
		}
		System.out.println("判断当前路径是否是一个文件"+file.isFile());
		System.out.println("判断当前路径是否是一个目录"+file.isDirectory());
		System.out.println("文件的 大小"+file.length());
		System.out.println("绝对路径"+file.getAbsolutePath());//从系统磁盘根目录开始的路径都是绝对路径
		System.out.println("相对路径"+file.getPath());//从当前文件开始的路径
		System.out.println("文件的名称:"+file.getName());
		
	}
}
FileInputStream (类)、

字节流用来读取
在这里插入图片描述

package Day16_Test;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Arrays;

/**
 * 文件的读取,FileinputStream
 * @author Administrator
 *
 */

public class IOStream {
	
	public static void main(String[] args) {
		try {
			FileInputStream is = new FileInputStream("D:\\FileTest.txt");
//			FileOutputStream os = new FileOutputStream("D:\\FileTest.txt",true); 
			
			//is.read();一次读取一字节
			int num = 0;
				do {
					num = is.read();
					System.out.print((char)num);
				} while (num!=-1);
	
			//is.read(ch);  一次读取数组的length的字节数
			byte[] ch = new byte[3];
			int length = 0;
			while (length!=-1) {
				length = is.read(ch);
				for (byte b : ch) {
					System.out.print(b+" ");
				} 
			}

			//isread(ch,off,len)
			byte[] ch = new byte[2];
			int length = 0;
			length = is.read(ch, 0, ch.length);
			while (length!= -1) {
				System.out.println("字节数: "+length);
				String s = new String(ch);//这里调用String的构造方法,将数组转换为字符串
				System.out.println(s);
				length = is.read(ch, 0, ch.length);
			}
			
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}
FileOutputStream(类)

字节流,用于写入
在这里插入图片描述

package Day16_Test;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Arrays;

/**
 * 文件的读取,FileinputStream
 * @author Administrator
 *
 */

public class IOStream {
	
	public static void main(String[] args) {
		try {
//			FileInputStream is = new FileInputStream("D:\\FileTest.txt");
//这个构造函数的第二个参数 true代表在原来文件的基础上追加操作
//false表示先清空原文件,在进行写操作,不写默认为false
			FileOutputStream os = new FileOutputStream("D:\\FileTest.txt",true); 
			byte[] b = {'a','c'};
			String str = "快乐学习";
			os.write('a');
			os.write(b);
			os.write(b, 0, b.length);
			byte[] c = str.getBytes();//利用String的方法讲字符串转换为byte[];
			os.write(c);
			
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}
			
FileReader (类) 字符流

使用字符数组接受流中数据
简单的使用:(出现的方法参考API)

package Day16_Test;

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;

public class ReadFile {
	public static void main(String[] args) {
		try {
			//锟侥硷拷锟街凤拷锟斤拷取锟斤拷
			FileReader fr =  new FileReader("D:\\FileTest.txt");
			//这是第一种方式:read(int num);
//			int ch = fr.read();//锟斤拷取一锟斤拷锟街凤拷
//			System.out.println(ch);
//			fr.close();
//			char[] c = new char[2];
//			int ch = fr.read(c);
//			while (ch!=-1) {
//				System.out.println(ch);
//				System.out.println(c);
//				ch =fr.read(c);
//			}
//			fr.close();

			//按照字符数组读取
			//出现乱码请按照下面出现编码的格式修改本身工程的编码格式,以及所操作的文档
			char[] ch = new char[2];
			int c = fr.read(ch, 0, ch.length);
			while (c!=-1) {
				System.out.println(ch);//new String(new String(ch).getBytes(),"GBK")
				c = fr.read(ch, 0, ch.length);
			}
			fr.close();
			
			System.out.println("成功");
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

}
FileWriter类 (字符流)

对文件原有内容的替换:

package Day16_Test;

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

public class Day16_Job {

	
	public static void main(String[] args) {
		File file = new File("D:\\DayJob.txt");
		
		try { 
		//思路:先读取文本内容,使用字符数组存储,
		//并使用String类的构造方法将其转换为字符串
		//涉及多个字符串,使用String.append方法合并字符串
			FileReader fr = new FileReader(file);
			char[] ch = new char[1024];
			int c = fr.read(ch, 0, ch.length);
			String str = new String(ch);
			System.out.println(str);
			str = str.replace("name", "小李");
			str = str.replace("sex", "男");
			str = str.replace("hobby", "打篮球");
			fr.close();
			FileWriter fw = new FileWriter(file);
			fw.write(str);
			fw.flush();
			fw.close();
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

循环写法
在这里插入图片描述

缓冲流

能对字符或者字节流的读写更加的高速,又称:增强IO流
要求:必须对基本流进行包装
(结合上一个字符流来看)

package Day16_Test;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class FileWirterT {

	public static void main(String[] args) {
		File file = new File("D:\\FileWirter.txt");
		FileReader fr = null;
		BufferedReader br = null;
		
		FileWriter fw = null;
		BufferedWriter bw = null;
		
		try {
			fr = new FileReader(file);
			//添加缓冲流,使文件读写更高效
			br = new BufferedReader(fr);
			fw = new FileWriter("D:\\FileWirter2.txt",true);
			bw = new BufferedWriter(fw);
			//char[] ch = new char[2];
			//int length = 0;
			String str = new String();
			//特有方法,可以读取一行,
			str = br.readLine();
			StringBuffer sb = new StringBuffer();
			while (str!=null){
				bw.write(str);
				bw.newLine();
				bw.flush();
				sb.append(str);
				str =br.readLine();
				//缓冲流的缺点:必须对每行手动增加换行
				
			}
			System.out.println("!!!");
			
		
			
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally{
			
			//正确的关闭方式,按照使用开启的顺序关闭,一定要做非空判断
			try {
				if (br!= null) {
					br.close();
				}
				if (fr!=null) {
					fr.close();
				}
				if (bw!=null) {
					bw.close();
				}
				if (br!=null) {
					br.close();
				}
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
}
PrintWriter 输出流

不需要缓冲流,直接使用
特有方法:
PrintWriter pw = new PrintWriter(“文件名”);
pw.println();//输出自动带换行
pw.newline();//输出换行

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值