Bufferedwriter не сохраняет *все* в файл

Я несколько новичок в java и надеялся, что кто-то может мне помочь. Я искал везде, но не могу найти решение. Я пытаюсь сохранить результат метода в файл с помощью буферизованной записи. Сам буферный писатель работает, так как сохраняет некоторые другие строки, но когда дело доходит до этой функции, просто отображает «ноль». Это потому, что результат этого метода возвращает более одной строки? Как решить эту проблему? Мой код выглядит следующим образом:

Код буферизованной записи:

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


person Sham    schedule 14.09.2011    source источник
comment
Кажется, вам не хватает кода. Куда вы звоните generateNetReport и saveStringToFile ?   -  person cdeszaq    schedule 14.09.2011
comment
saveStringToFile — имя кода буферизованной записи, generateNetReport создается в основной функции. приведенный выше код - это просто фрагменты моего исходного класса.   -  person Sham    schedule 14.09.2011


Ответы (1)


(Отредактировано.)

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

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

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

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

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

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

person Jon Skeet    schedule 14.09.2011
comment
но getNetDetails() определяется как void... не будет ли это ошибкой компиляции? - person amit; 14.09.2011
comment
@amit - тогда getNDetDetails() возвращает значение, а не просто сбрасывает его в глобальную переменную. - person cdeszaq; 14.09.2011
comment
извините, я имел в виду netDetails, и это статическая строка. У меня есть другая статическая строка, которая сохраняется в файл, но не в netDetails, и я не понимаю, почему. - person Sham; 14.09.2011
comment
Его не следует называть getNetDetails(), если он не возвращает netDetails, и проблема остается в том, что netDetails равно null. - person Christoffer Hammarström; 14.09.2011
comment
@Jon Skeet - спасибо за ваш обновленный ответ, теперь он возвращает последнюю строку в файл, но как мне заставить его отображать весь результат, а не только последнюю строку? Еще раз спасибо за ваш ответ. - person Sham; 14.09.2011
comment
@Sham: Итак, вы хотите загрузить весь файл в строку? Было бы проще всего использовать Guava (guava-libraries.googlecode.com), так как вы могли бы просто использовать CharStreams.toString(reader). - person Jon Skeet; 14.09.2011
comment
@Jon Skeet - Спасибо за предложение использовать CharStreams. Моя проблема теперь решена! :) - person Sham; 14.09.2011