文件基本操作
import java.io.File
String filePath = "绝对路径";
File file = new File(filePath);
file.exists();
file.isFile();
file.isDirectory();
file.mkdirs();
file.createNewFile();
file.getName();
file.length();
file.lastModified();
file.getAbsolutePath();
String[] list = file.list();
File[] files = file.listFiles();
文件复制与缓冲区
- 如果依次读数据,读到末尾(即-1)还继续读,复制的文件里会出现不明符号
- 用循环依次读所有数据效率低下,因为每读一个数据都会开关一次文件,为了提升效率,设计了缓冲区buffer,先一口气读好多数据,放到缓冲区,再一口气把缓冲区中的数据写入目的地文件
File inFile = new File("路径...\\test.txt");
File outFile = new File("路径...\\test.txt.copy");
FileInputStream in = new FileInputStream(inFile);
FileOutputStream out = new FileOutputStream(outFile);
int data = in.read();
out.write(data);
while((data = in.read()) != -1){
out.write(data);
}
BufferedInputStream buffIn = new BufferedInputStream(in);
BufferedOutputStream buffOut = new BufferedOutputStream(out);
byte[] cache = new byte[1024];
while((data = buffIn.read(cache)) != -1){
buffOut.write(cache, 0, data);
}
BufferedReader reader = new BufferedReader(new FileReader(inFile));
PrintWriter writer = new PrintWriter(outFile);
String line = null;
while((line = reader.readLine()) != null){
writer.println(line);
}
writer.flush();
in.close();
out.close();
buffIn.close();
buffOut.close();
序列化与反序列化
- 序列化——把内存中的对象变成字节码形式,通过管道写入目的地文件
- 反序列化——把文件中的数据读成对象
- 只有增加了特殊标记的类才能在写入文件时转换成字节码文件,进行序列化操作
- 这里的标记是一个Serializable接口
File file = new File("文件的绝对路径");
FileOutputStream out = new FileOutputStream(file);
ObjectOutputStream objectOut = new ObjectOutputStream(out);
User user = new User();
objectOut.writeObject(user);
objectOut.flush();
FileInputStream in = new FileInputStream(file);
ObjectInputStream objectIn = new ObjectInputStream(in);
Object o = objectIn.readObject();
class User implements Serializable{
}