Java-IO总结
File文件操作类
创建一个File类:
public File(String PathName); //设置路径
public File(String parent,String child); //设置父路径,子文件
public boolean createNewFile(); //创建新文件
public boolean exists(); //判断文件是否存在
public boolean delete(); //删除文件
目录操作:
取得父路径或父对象:
public String getParent();
public String getParentFile();
创建目录: public boolean mkdir();
1. 判断路径是否是文件: public boolean isFile()
2. 判断路径是否是目录: public boolean isDirectory()
3. 取得文件大小(字节): public long length()
4. 最后一次修改日期 : public long lastModified()
IO流
处理文件的内容需要使用流,流分为字节流与字符流
字节流:InputStream、OutputStream
字符流:Reader、Writer
不管是使用字节流还是字符流,都通用如下使用规则:
1. 根据文件路径创建File类对象 ;
2. 根据字节流或字符流的子类实例化父类对象 ;
3. 进行数据的读取或写入操作;
4. 关闭流 close()。
字节流的使用:
创建:
InputStream in = new FileInputStram(File file);
OutputStream out = new FileOutputStram(File file);
读取: public int read(byte b[]) throws IOException //InputStream 使用
写入:public void write(byte b[]) throws IOException //OutputStream 使用
字符流的使用
创建:
Reader reader = new FileReader(File file);
Writer writer = new FileWriter(File file);
在读写上基本与字节流的使用方式一样,不过需要注意的是:在Writer类里面提供的write()方法,该方法接收的类型都是 char型,要注意的是,Writer类提供了一个直接输出字符串的方法:public void write(String str) throws IOException
转换流
即字节流转化为字符流
OutputStreamWriter:将字节输出流变为字符输出流(Writer对于文字的输出要比OutputStream方便)
InputStreamReader:将字节输入流变为字符输入流(InputStream读取的是字节,不方便中文的处理)
转换流其实是字符流的子类,构造注入字节流来达到转换的效果,他们的继承关系如下:
关于字节流和字符流的使用:在以后进行IO处理的时候,如果处理的是图片、音乐、文字都可以使用字节流,而只有处理中文的时候才会使用字符流。
打印流
打印流是为了更方便与直接输出信息,若我们使用OutputSteam,需要先将输出的类型转为字节数组才能打印,打印流则是OutputStream的加强版。java提供有专门的打印流处理类:PrintStream(字节打印流)、PrintWriter(字符打印流)
两种输入流
1. BufferStream 属于一个缓冲输入流,是一个字符流的操作对象。
该类有一个读取行的方法:String readLine() throws IOException //以回车为换行符
BufferStream的构造方法为: public BufferedReader(Reader in) 而System.in是InputStream类的子类,这个时候与Reader没有关系,要建立起联系就要用到InputStreamReader类(转换流)使用方式如下:
BufferStream buf = new BufferStream( new InputStreamReader(System.in));
2. Scanner 是一个专门进行输入流处理的程序类
Scanner的主要方法:
1. 判断是否有指定类型数据: public boolean hasNextXxx()
2. 取得指定类型的数据: public 数据类型 nextXxx()
3. 定义分隔符:public Scanner useDelimiter(Pattern pattern)
4. 构造方法:public Scanner(InputStream source)
总结:以后除了二进制文件拷贝的处理之外,那么只要是针对程序的信息输出都是用打印流(PrintStream、PrintWriter),信息输入使用Scanner。
序列化
对象序列化指的是:将内存中保存的对象变为二进制数据流的形式进行传输,或者是将其保存在文本中。
如果要使用系列化,则必须实现java.io.Serializable接口。但是这个接口并没有任何的方法定义,只是一个标识而已。
序列化与反序列化的操作:在java.io包中提供有两个处理类:ObjectOutputStream、ObjectInputStream。
从类的关系可以看出来,ObjectOutputStream、ObjectInputStream分别extends OutputStream、InputStream。序列化使用的处理类还是与字节流有关。
序列化使用测试:
import java.io.*;
class Person implements Serializable{
private String name;
private Integer age;
public Person(String name, Integer age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + "]";
}
}
public class TestSer {
public static void main(String[] args) throws FileNotFoundException, IOException, ClassNotFoundException {
// Person person = new Person("张三", 20);
File file = new File("C:\\Users\\Administrator\\Desktop\\per.txt");
// ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(file));
// oos.writeObject(person);
// oos.close();
ObjectInputStream ois = new ObjectInputStream(new FileInputStream(file));
Object object = ois.readObject();
System.out.println(object);
ois.close();
}
}