有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

客户端服务器BufferedWriter未写入。txt文件[JAVA]

Aim:服务器从客户端发送的文本文件中读取数据。服务器将此数据存储在另一个文本文件中

问题:我能够读入文本文件并将其打印到控制台,但是,当我使用BufferedWriter运行代码并打开新文本文件后,该文件为空。我不完全确定我是否错误地使用了BufferedWriter函数,或者是否遗漏了任何关键函数

代码:

BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));

String fromServer;
String fromUser;

while (true) {

        fromUser = stdIn.readLine();

        if (fromUser != null) {

            FileReader file = new FileReader("client-temp.txt");
            BufferedReader tc = new BufferedReader(file);
            BufferedWriter bw = new BufferedWriter(new FileWriter("datastore.txt"));

            String line;

            while ((line = tc.readLine()) != null)
            {
                String[] data = line.split(",");
                String sensortype = data[0];
                String date = data[1];
                String time = data[2];
                String reading = data[3];

                String newdata = sensortype + date + time + reading;
                System.out.println(line);

                if (line != null)
                {
                    out.write(line);
                    out.flush();
                }

                System.out.println("Data sent to file");

            }


            System.out.println(EmsClientID + " sending " + fromUser + " to EmsServer");
            out.println(fromUser);
        }
        fromServer = in.readLine();
        System.out.println(EmsClientID + " received " + fromServer + " from EmsServer");
    }

共 (2) 个答案

  1. # 1 楼答案

    你的代码不完整。我会突发奇想,设想一下你的问题

    加上

    out.close();
    

    在代码的末尾

  2. # 2 楼答案

    你永远不会在BufferedWriter的实例上调用flushclose,事实上,你完全忽略了它。而且,你的资源管理根本不存在。如果你打开一个资源,你应该关闭它

    例如

    FileReader file = new FileReader("client-temp.txt");
    try (BufferedReader tc = new BufferedReader(file)) {
        try (BufferedWriter bw = new BufferedWriter(new FileWriter("datastore.txt"))) {
    
            String line;
    
            while ((line = tc.readLine()) != null)
            {
                String[] data = line.split(",");
                String sensortype = data[0];
                String date = data[1];
                String time = data[2];
                String reading = data[3];
    
                String newdata = sensortype + date + time + reading;
                System.out.println(line);
    
                if (line != null)
                {
                    bw.write(line);
                    bw.newLine();
                }
    
                System.out.println("Data sent to file");
            }
        } catch (IOException exp) {
            exp.printStackTrace();
        }
    } catch (IOException exp) {
        exp.printStackTrace();
    }
    

    有关详细信息,请参见The try-with-resources Statement

    ps:您可以复合try-with-resource语句,在同一try (...) {部分中打开多个资源,但我想演示基本概念