File和IO流
是用于处理设备之间的数据传输,如读写文件,网络通讯等
输入input:读取外部数据到程序中
输出output:将程序中的数据输出到外部,如磁盘,光盘等储存设备中
IO流的分类:
流向不同:输入流,输出流
角色不同:节点流,处理流
基础IO流的框架
-
抽象基类: InputStream OutputStream Reader writer 4个节点流: FileInputStream FileOutputStream FileReader Filewriter 4个处理流 BufferedInputStream BufferedOutputStream BufferedReader Bufferedwriter
-
FileReader和Filewriter输出文件,读取数据
public class FileTest { /** *读取文件 * @throws IOException */ @Test public void test() throws IOException { File file = new File("hello.txt"); FileReader fileReader = new FileReader(file); // int read = fileReader.read(); // while (read != -1){ // System.out.print((char) read); // read = fileReader.read(); // } char[] arr = new char[6]; int len; while ((len = fileReader.read(arr)) != -1){ for (int i = 0; i < len; i++) { System.out.print(arr[i]); } } fileReader.close(); } /** * 写出文件 */ @Test public void test01(){ FileWriter fileWriter = null; try { File file = new File("info.txt"); fileWriter = new FileWriter(file); fileWriter.write("ljx"); fileWriter.write("ljx很帅"); fileWriter.write("ljx最好"); fileWriter.write("ljx啦啦啦"); System.out.println("输出成功!"); } catch (IOException e) { e.printStackTrace(); }finally { try { if (fileWriter!=null){ fileWriter.close(); } } catch (IOException e) { e.printStackTrace(); } } } /** * 复制文件 * @throws IOException */ @Test public void test02() throws IOException{ File readFile = new File("hello.txt"); File writerFile = new File("helloCopy.txt"); FileReader fileReader = new FileReader(readFile); FileWriter fileWriter = new FileWriter(writerFile); char[] arr = new char[5]; int len; while((len = fileReader.read(arr)) != -1){ fileWriter.write(arr,0,len); } System.out.println("复制成功!"); fileWriter.close(); fileReader.close(); }
-
FileInputStream和FileOutputStream
注意点:
对于字符流,只能来处理一些文本文件,不能用来处理非文本文件
对于字节流,通常用来处理一些非文本文件,如果是文本的复制操作,也可以使用字节流
文本文件:.txt , .java , .c , .cpp , .py等
非文本文件:.doc , .xlc , .jpg , .pdf
缓冲流(处理流的一种):
作用:提升文本读写的效率
其中,flush就是刷新数据,他在每次循环时,就把数据刷新一次,主动将内存的数据写给到磁盘中
注意,调用close也会刷新数据
其中还有readline,就是读取一行的字符串
@Test public void test() throws Exception{ File file = new File("hello.txt"); File writer = new File("hello_copy.txt"); BufferedReader bf = new BufferedReader(new FileReader(file)); BufferedWriter bw = new BufferedWriter(new FileWriter(writer)); String str; while ((str = bf.readLine()) != null ){ System.out.println(str); bw.write(str); System.out.println("复制成功"); bw.newLine();//换行 bw.flush();//刷新 } bf.close(); bw.close(); }
序列化:使用的对象流有两个
实例:
@Test public void test() throws IOException, ClassNotFoundException { /** * 序列化过程 */ File file = new File("li.txt"); ObjectOutputStream outputStream = new ObjectOutputStream(new FileOutputStream(file)); outputStream.writeUTF("想你的夜"); outputStream.flush(); outputStream.writeObject("我不想你的"); outputStream.flush(); ObjectInputStream inputStream = new ObjectInputStream(new FileInputStream(file)); /** * 反序列化过程 */ String str = inputStream.readUTF(); System.out.println(str); Object object = inputStream.readObject(); System.out.println(object); inputStream.close(); outputStream.close(); }