【问题标题】:BufferedWriter NOT writing to .txt file [JAVA] [duplicate]BufferedWriter 不写入 .txt 文件 [JAVA] [重复]
【发布时间】:2014-12-10 00:25:24
【问题描述】:

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

问题: 我可以读取文本文件并将其打印到控制台,但是,当我使用 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");
    }

【问题讨论】:

  • 您没有刷新或关闭作者...此外,您实际上在哪里写信给bw
  • 我用过out.flush()? @MadProgrammer
  • 但是out 是什么?我看到的只是bw 从未使用过...
  • @MadProgrammer 哦,我明白了。我用错了名字

标签: java client-server bufferedreader bufferedwriter


【解决方案1】:

您永远不会在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 (...) { 部分中打开多个资源,但我想演示基本概念

【讨论】:

    【解决方案2】:

    您的代码不完整。我会心血来潮在这里承担你的问题。

    添加

    out.close();
    

    在代码的末尾。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-08-26
      • 1970-01-01
      • 2012-05-27
      • 2013-01-08
      • 2015-07-15
      • 2014-01-18
      • 1970-01-01
      相关资源
      最近更新 更多