Bufferedwriter не сохраняет * все * в файл - PullRequest
0 голосов
/ 14 сентября 2011

Я немного новичок в Java и надеялся, что кто-нибудь сможет мне помочь.Я искал везде, но не могу найти решение.Я пытаюсь сохранить результат метода в файл, используя 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 ??

1 Ответ

3 голосов
/ 14 сентября 2011

(ред.)

Это проблема, в getNetDetails():

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

Другими словами, метод будет всегда оставлять netDetails нулевым, если только нет исключения.

Было бы лучше, если бы getNetDetails() возвратил строку вместо установки переменной, и предполагая, что она должна возвращать последнюю строку файла, это должно быть что-то вроде:

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

Вы должны также закрыть InputStreamReader в блоке finally и почти наверняка не проглотит исключение.

...