java io 文本格式存储对象到文件

本文记录利用java 字符流把对象保存本地文件,然后读取到对象中。旨在练习常用javaio操作。

用到的java io流如下:

FileOutputStream 文件输出流,可以打开一个文件流,用于向文件写入内容。 BufferedOutputStream输出缓冲流,可以包装一个输出流,优化流的写入效率。 PrinterWriter 文本输出流,可以包装一个输出流,用于向文件写入字符。

FileInputStream 文件输入流,可以打开一个文件流,用于读取文件内容。 BufferedInputStream 数据缓冲流,可以包装一个输入流,优化流的读取效率。 Scanner 可以包装一个输入流,用于读取文本内容。

代码如下:

//测试代码
public class TestIo {

    public static void main(String[] args) throws IOException {
        // TODO Auto-generated method stub

        //产生数据
        List<User> listData = new ArrayList();
        for (int i = 0; i < 100; i++) {
            User user = new User();
            user.id = i;
            user.userName = "张xxx" + i;
            listData.add(user);
        }

        //不存在创建文件
        File file = new File("./testFile");
        boolean isExit = file.exists();
        if (!isExit) {
            file.mkdir();
        }
        Path path = Paths.get(file.getPath() + File.separator + "user.data");
        // Files.copy();
        if (!Files.exists(path)) {
            Files.createFile(path);
        }

        //声明流
        FileInputStream fileIn = null;
        FileOutputStream outPut = null;
        //保存数据
        try {
            PrintWriter printWriter;
            outPut = new FileOutputStream("./testFile/user.data");
            printWriter = new PrintWriter(new BufferedOutputStream(outPut));
            printWriter.println(listData.size());
            for (int i = 0; i < 100; i++) {
                User user = listData.get(i);
                user.writeData(printWriter);
            }
            printWriter.close();
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        //读取数据
        try {
            fileIn = new FileInputStream("./testFile/user.data");
            Scanner scaner = new Scanner(new BufferedInputStream(fileIn));
            int size = Integer.parseInt(scaner.nextLine());
            List<User> readData = new ArrayList();
            for(int i =0;i<size;i++){
                User user = new User();
                user.readData(scaner);
                readData.add(user);
                System.out.println(user.id+user.userName);
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } finally {
            try {
                fileIn.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}
//user实体类
public class User {
    //id
    public int id;
    //用户名
    public String userName;

    //写入数据
    public void writeData(PrintWriter out) {
        out.println(id+"|"+userName);

    }
    //读取数据
    public void readData( Scanner scaner){
        String content = scaner.nextLine();
        String [] arrayContent = content.split("\|");
        id = Integer.parseInt(arrayContent[0]);
        userName = arrayContent[1];
    }

}

希望本文对你有所帮助

经验分享 程序员 微信小程序 职场和发展