IO框架
1. File类
File类有用于操作文件以及查看文件属性的方法
package com.qfedu.test1;import java.io.File;import java.io.IOException;/*** File类 文件操作类 可以查看文件的属性 和 创建文件等* @author WHD**/public class TestFile {public static void main(String[] args) throws IOException {File file2 = new File("C:\\Users\\WHD\\Desktop\\a.txt");System.out.println(file2.createNewFile());File file1 = new File("a.txt");System.out.println(file1.createNewFile());System.out.println("是否是一个文件" + file1.isFile());System.out.println("是否是一个文件夹" + file1.isDirectory());System.out.println("相对路径" + file1.getPath());System.out.println("绝对路径" + file1.getAbsolutePath());System.out.println("文件名称" + file1.getName());System.out.println("文件大小" + file1.length());System.out.println("文件是否存在" + file1.exists());System.out.println("文件删除是否成功" + file1.delete());File file3 = new File("A");file3.mkdir();// make directoryFile file4 = new File("B/C/D");file4.mkdirs();file3.delete();file4.delete();}}
2. 字节流(读取)
2.1 InputStream
字节读取流父类 抽象类
2.2 FileInputStream
InputStream字节读取流父类 FileInputStream 子类 read() 每次读取一个字节 返回值为读取的内容 read(byte [] data) 返回值为读取的个数 读取到的内容存在数组中 close() 关闭资源
package com.qfedu.test2;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;/*** InputStream字节读取流父类* FileInputStream 子类* read() 每次读取一个字节 返回值为读取的内容* read(byte [] data) 返回值为读取的个数 读取到的内容存在数组中* close() 关闭资源* @author WHD**/public class TestFileInputStream1 {public static void main(String[] args) {try {FileInputStream fis = new FileInputStream("A.txt");int data = fis.read();System.out.println("第一次读取" + (char)data);int readData = -1;while((readData = fis.read()) != -1) {System.out.println((char)readData);}} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}}
3.字节流(写入)
3.1 OutputStream
字节写入流父类 抽象类
3.2 FileOutputStream
OutputStream FileOutputStream write(int data); 写一个字节 write(byte [] data); 写一个字节数组 close()
package com.qfedu.test4;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;/*** OutputStream* FileOutputStream* write(int data); 写一个字节* write(byte [] data); 写一个字节数组* close()* @author WHD**/public class TestFileOutputStream {public static void main(String[] args) {FileOutputStream fos = null;try {fos = new FileOutputStream("B.txt");fos.write(97);} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}finally {try {if(fos != null) {fos.close();}} catch (IOException e) {e.printStackTrace();}}}}
4. 字符流(读取)
4.1 Reader
字符读取流父类 抽象类
4.1.1 InputStreamReader
可以指定读取编码格式的字符读取类 read() 每次读取一个字符
package com.qfedu.test5;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.io.InputStreamReader;/*** Reader 字符流读取父类 抽象类* InputStreamReader 子类* read() 每次读取一个字符* @author WHD**/public class TestInputStreamReader {public static void main(String[] args) {FileInputStream fis = null;InputStreamReader isr = null;try {fis = new FileInputStream("A.txt");isr = new InputStreamReader(fis);int data = -1;while((data = isr.read())!= -1) {System.out.println((char)data);}} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}finally {try {if(fis != null) {fis.close();}if(isr != null) {isr.close();}}catch (IOException e) {e.printStackTrace();}}}}
4.1.1.1 FileReader
只能按照本地默认的编码格式读取文件 字符流
package com.qfedu.test6;import java.io.FileNotFoundException;import java.io.FileReader;import java.io.IOException;/*** Reader* InputStreamReader* FileReader* @author WHD**/public class TestFileReader {public static void main(String[] args) {try {FileReader fr = new FileReader("A.txt");int data = -1;while(( data = fr.read()) != -1) {System.out.println((char)data);}} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}finally {// 关闭资源}}}
4.1.2 BufferedReader
独有的方法 readLine() 读取一行
package com.qfedu.test7;import java.io.BufferedReader;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStreamReader;/*** Reader* BufferedReader** readLine() 读取一行* @author WHD**/public class TestBufferedReader1 {public static void main(String[] args) throws IOException {FileInputStream fis = new FileInputStream("A.txt");InputStreamReader isr = new InputStreamReader(fis);BufferedReader br = new BufferedReader(isr);String line = null;while((line = br.readLine()) != null) {System.out.println(line);}// 关闭资源}}
5. 字符流(写入)
5.1 Writer
字符写入流父类 抽象类
5.1.1 OutputStreamWriter
write(String str) 可以直接写入字符串 可以指定写入的编码格式
package com.qfedu.test8;import java.io.IOException;import java.io.FileOutputStream;import java.io.OutputStreamWriter;/*** Writer* OutputStreamWriter* @author WHD**/public class TestOutputStreamWriter1 {public static void main(String[] args) throws IOException {OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("D.txt",true),"utf-8");osw.write("hello world世界你好");osw.close();}}
5.1.1.1 FileWriter
只能按照本地的默认的编码格式写入文件
package com.qfedu.test8;import java.io.FileWriter;import java.io.IOException;/*** Writer* OutputStreamWriter* FileWriter* @author WHD**/public class TestFileWriter1 {public static void main(String[] args) {FileWriter fw;try {fw = new FileWriter("E.txt");fw.write("abcdefg");fw.flush(); // 刷新 表示将内容从内存刷新到硬盘} catch (IOException e) {e.printStackTrace();}finally {// 关闭资源}}}
5.1.2 BufferedWriter
独有的newLine() 换行的方法
package com.qfedu.test8;import java.io.BufferedWriter;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.OutputStreamWriter;/*** Writer* BufferedWriter* @author WHD**/public class TestBufferedWriter1 {public static void main(String[] args) throws IOException {BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("F.txt")));bw.write("abcd\n");bw.write("efgh");bw.newLine();bw.write("hello world");bw.flush();}}
6. 数据流
用于读写二进制文件 DataInputStream读取二进制文件 DataOutputStream写入二进制文件
package com.qfedu.test9;import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;/*** DataInputStream读取二进制文件* DataOutputStream写入二进制文件** @author WHD**/public class TestDataStream {public static void main(String[] args) throws IOException {FileInputStream fis = new FileInputStream("C:\\Users\\WHD\\Desktop\\zs1.jpg");DataInputStream dis = new DataInputStream(fis);byte data [] = new byte[fis.available()];dis.read(data);// System.out.println(new String(data,0,data.length));DataOutputStream dos = new DataOutputStream(new FileOutputStream("copyzs.jpg"));dos.write(data);fis.close();dis.close();dos.close();}}
7. 序列化
序列化:将对象写入到二进制文件中 反序列化:将存有对象的二进制文件读取为对象 要求:被序列化的对象所属类必须实现Serializable接口 此接口是空接口 相当于一个标识 被transient修饰的属性不能被序列化
package com.qfedu.test9;import java.io.Serializable;public class Student implements Serializable{private static final long serialVersionUID = -4543464400965999994L;private String name;private int age;private transient String address;public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public Student() {}public Student(String name, int age) {this.name = name;this.age = age;}public Student(String name, int age, String address) {this.name = name;this.age = age;this.address = address;}@Overridepublic String toString() {return "Student [name=" + name + ", age=" + age + ", address=" + address + "]";}}
package com.qfedu.test9;import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;/*** DataInputStream读取二进制文件* DataOutputStream写入二进制文件** @author WHD**/public class TestDataStream {public static void main(String[] args) throws IOException {FileInputStream fis = new FileInputStream("C:\\Users\\WHD\\Desktop\\zs1.jpg");DataInputStream dis = new DataInputStream(fis);byte data [] = new byte[fis.available()];dis.read(data);// System.out.println(new String(data,0,data.length));DataOutputStream dos = new DataOutputStream(new FileOutputStream("copyzs.jpg"));dos.write(data);fis.close();dis.close();dos.close();}}
