0

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

缓冲编写器代码:

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 吗?

4

1 回答 1

3

(已编辑。)

这就是问题所在getNetDetails()

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

换句话说,除非有异常,否则该方法将始终保留为 null。netDetails

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

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

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

于 2011-09-14T13:45:10.660 回答