【问题标题】:Bufferedwriter not saving *everything* to fileBufferedwriter 没有将*所有内容*保存到文件中
【发布时间】:2011-11-17 01:16:12
【问题描述】:

我对java有点陌生,希望有人可以帮助我。我到处寻找,但似乎找不到解决方案。 我正在尝试使用 bufferedwriter 将方法的结果保存到文件中。 bufferedwriter 本身在保存一些其他字符串时工作,但是当涉及到这个函数时,它只是显示'null'。是不是因为这个方法的结果返回了多个字符串?我该如何解决这个问题? 我的代码如下:

Bufferedwriter 代码:

public static boolean saveStringToFile (String fileName, String saveString)
{
    boolean saved = false;
    BufferedWriter bw = null;
    try
    {
    bw = new BufferedWriter(new FileWriter(fileName));
    try 
    {
            bw.write(saveString);
            saved = true;
    }
    finally
    {
            bw.close();
    }

    }
    catch (IOException ex)
    {
        ex.printStackTrace();
    }
    return saved;
}

函数本身:

public static void getNetDetails()
{
    try {
        Process net = Runtime.getRuntime().exec("lsof -i -n -P");
        BufferedReader netInput = new BufferedReader(
                new InputStreamReader(net.getInputStream()));
    while ((netDetails = netInput.readLine()) !=null)
    {
        System.out.println(netDetails);
        System.out.println("\n");
    }

        }
        catch(IOException e) {
               System.out.println("exception happened - here are the details: ");
                e.printStackTrace();

            }
}

使用缓冲写入器将函数保存到文件

public static void generateNetReport()
{
    saveStringToFile("Net.txt","here is the thing.." + "\n" + netDetails );
}

有人可以帮助我如何将 netDetails 保存到文件中而不只是显示 null 吗?

【问题讨论】:

  • 您似乎缺少代码。你在哪里打电话给generateNetReportsaveStringToFile
  • saveStringToFile 是 bufferedwriter 代码的名称,generateNetReport 是在 main 函数中创建的。上面提供的代码只是我原来的类的sn-ps。

标签: java java-io bufferedwriter


【解决方案1】:

(已编辑。)

这就是问题所在,在getNetDetails():

while ((netDetails = netInput.readLine()) !=null)

换句话说,该方法总是netDetails 保留为空,除非出现异常。

如果getNetDetails()返回一个字符串而不是设置一个变量会更好,并且假设它是为了返回文件的最后一行,它应该是这样的:

String line = null;
String nextLine;
while ((nextLine = netInput.readLine()) != null) {
    line = nextLine;
}
return line;

您应该在 finally 块中关闭InputStreamReader,并且几乎可以肯定吞下异常。

【讨论】:

  • 但是getNetDetails()被定义为void...会不会是编译错误?
  • @amit - 然后让getNDetDetails() 返回值,而不是将其转储到全局变量中。
  • 对不起,我的意思是 netDetails,它是一个静态字符串。我有其他静态字符串确实保存到文件中,但没有保存到 netDetails,我不明白为什么。
  • 如果不返回netDetails,则不应命名为getNetDetails(),问题仍然是netDetails为空。
  • @Jon Skeet - 感谢您更新的答案,它现在确实将最后一行返回到文件中,但是我如何让它显示整个结果而不仅仅是最后一行?再次感谢您的回答。
猜你喜欢
  • 2012-11-05
  • 1970-01-01
  • 1970-01-01
  • 2011-03-02
  • 2017-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多