Java IO

文件操作

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

posted @ 2019-01-29 18:55  darknessplus  阅读(170)  评论(0编辑  收藏  举报