文件操作
File类,获取文件的一些属性,要对文件内容进行操作需要配合流
常量:
static String separator//路径分隔符例如/
static String pathSeparator//多个路径的分隔符,例如;
方法:
boolean createNewFile()//创建新文件
boolean mkdir()//创建新目录
boolean delete()//删除文件
String[] list()//目录下的文件名
File[] listFiles()//目录下的文件
流的分类
按方向:输入流、输出流
按数据类型:字节流、字符流
按功能:节点流、处理流(处理流对节点流进行包装并提供扩展功能,例如buffer流、object流)
所有流在使用结束要手动close
节点流
基于字节的节点流
接口:InputStream、OutputStream
实现类:FileInputStream、FileOutputStream
基于字符的节点流
接口:Reader、Writer
实现类:FileReader、FileWriter(继承自InputStreamReader、OutputStreamWriter)
处理流
处理流是对节点流进行包装的,根据处理流的名字可以看出其包装的节点流
缓冲流
字节流和字符流都有相应的缓冲流
BufferedInputStream、BufferedOutputStream、BufferedReader(提供的readLine方法比较方便)、BufferedWriter(使用的最后要flush)
BufferedReader reader =null;
BufferedWriter writer=null;
try {
reader = new BufferedReader(new FileReader("F:\in.txt"));
writer=new BufferedWriter(new FileWriter("F:\out.txt"));
String line=null;
while((line=reader.readLine())!=null){
writer.write(line);
writer.newLine();
System.out.println(line);
}
writer.flush();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
assert reader != null;
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
try {
assert writer != null;
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
转换流
InputStreamReader(字节到字符的转换,接收字节输入流)、OutputStreamWriter(字符到字节的转换,接收字节输出流)
随机存取流
public class RandomAccessFile extends Object implements DataOutput, DataInput, Closeable
RandomAccessFile(File file, String mode)
void seek(long pos)
String readLine()
int readInt()
void write(byte[] b)
void writeDouble(double v)
对象流
ObjectInputStream、ObjectOutputStream
将实现序列化接口的对象读写进文件
可以对InputStream和OutputStream进行包装
readObject、writeObject方法(每次write都要flush)
ObjectOutputStream outputStream =new ObjectOutputStream(new FileOutputStream("F:\out.txt"));
Student student=new Student(12,"张三");
outputStream.writeObject(student);
outputStream.flush();
outputStream.close();
student=null;
ObjectInputStream inputStream = new ObjectInputStream(new FileInputStream("F:\out.txt"));
student=(Student) inputStream.readObject();
System.out.println(student);
数据流
DataInputStream、DataOutputStream
包装InputStream、OutputStream
对基本类型的数据进行read和write
总结
选择流要考虑数据源与目的地(文件、键盘、网络、标准输入等)、数据类型(字节、字符)、要进行的处理(缓冲、序列化等)
参考:
https://www.cnblogs.com/rollenholt/archive/2011/09/11/2173787.html
https://www.cnblogs.com/hxsyl/p/3302852.html
https://www.cnblogs.com/baixl/p/4170599.html
https://www.cnblogs.com/authetic/p/8861524.html