2013-04-20 4 views
0

У меня есть программа, в которой я использую цикл while для печати как на консоль, так и на html-файл. Однако, несмотря на то, что он печатает на консоли, программа будет выводить только окончательную строку в html-файл. Вот код для моего цикла, который, как предполагается печатать информацию, извлеченную из текстового файла для линий 9 до 16.while цикл только один раз, а не для всего цикла

//read the txt file 
Path objPath = Paths.get("dirsize.txt"); 
if (Files.exists(objPath)) 
{ 

    File objFile = objPath.toFile(); 
    try(BufferedReader in = new BufferedReader(
          new FileReader(objFile))) 
    { 
    String line = in.readLine(); 
    int lineNum = 1; 
    //extract the month 
    String monthSubstring = line.substring(25,27); 
    month = Integer.parseInt(monthSubstring) -1 ; 
    //extact the year 
    String yearSubstring = line.substring(31,35); 
    year = (Integer.parseInt(yearSubstring)); 
    //extract the date 
    String daySubstring = line.substring(28,30); 
    day = Integer.parseInt(daySubstring); 
    PrintWriter out = new PrintWriter (new BufferedWriter(new FileWriter("Output.html"))); 
    while(line != null) 
    { 
     line = in.readLine(); 
     lineNum ++; 
     if (lineNum == 3) 
     { 
      //extract the hour 
      String hourSubstring = line.substring(21,23); 
      hour = Integer.parseInt(hourSubstring); 
      //extract the minute 
      String minuteSubstring = line.substring(24,26); 
      minute = Integer.parseInt(minuteSubstring); 
      //extract the second 
      String secondSubstring = line.substring(27,29); 
      second= Integer.parseInt(secondSubstring); 
      } 
     if(lineNum ==5) 
     { 
      //Extract the branch 
      strBranch = line.substring(22, 27);   
     }   
     if (lineNum == 6) 
     { 
      //Extract the computer 
      strCPU = line.substring(26,32); 
     } 
    if (lineNum >= 9 && lineNum <= 16) 
     { 
      //call the MyDirectory methods to get the files name,size and number of files 
      MyDirectory directory = new MyDirectory(line); 
      fileName = directory.getName(); 
      fileSize = directory.getsize(); 
      fileNum = directory.getNum(); 
      //create the dteDate calender 
      GregorianCalendar dteDate = new GregorianCalendar(year, month, day, hour, minute, second); 
      //fromat the date 
      SimpleDateFormat strDate = new SimpleDateFormat("MMM dd, yyyy h:m"); 
     //Write the data to the file 
     out.println((strBranch + "; " + 
        strCPU + "; " + 
        strDate.format(dteDate.getTime())) + "; " + 
        fileName + "; " + 
        fileSize + "; " + 
        fileNum); 
     //create the necessary output for the console 
      System.out.println((strBranch + "; " + 
        strCPU + "; " + 
        strDate.format(dteDate.getTime())) + "; " + 
        fileName + "; " + 
        fileSize + "; " + 
        fileNum); 
     }  
     out.flush(); 
    } 

    } 

    //catch any IOExceptions and print out e 
catch (IOException e) 
    { 
    System.out.println(e); 
    } 

} 

EDIT: Через совет отправил в ответах теперь у меня есть свой выход на все, но им с жесткое форматирование времени, в html-файле есть все строки вместе без пробелов, которые я пробовал с помощью «\ n» в конце моего вывода, но тогда мой код не компилируется, потому что он говорит, что null не разрешено там, кто-нибудь знает, как форматируйте это в строки, когда он не позволит мне положить «\ n» в конце моего метода печати?

Я не уверен, что это много кода или недостаточно для решения проблемы, и если я должен что-то добавить к своему сообщению или что-нибудь сделать, просто дайте мне знать.

ответ

3

Это довольно очевидно - вы создаете файл каждый раз, когда ваш цикл повторяется в то время как (смотрите ниже):

   PrintWriter out = new PrintWriter (
          new BufferedWriter(
          new FileWriter("Output.html"))); 
     //Write the data to the file 
     out.println((strBranch + "; " + 
        strCPU + "; " + 
        strDate.format(dteDate.getTime())) + "; " + 
        fileName + "; " + 
        fileSize + "; " + 
        fileNum); 
     //flush the data and close the output stream 
     out.close(); 

Вы должны создать файл перед входом во время цикла вместо этого.

Так что ваш код должен выглядеть примерно так:

 PrintWriter out = new PrintWriter (new BufferedWriter(new FileWriter("Output.html"))); 
    while(line != null) 
    { 
     //perform your file operations here 
    } 
    out.close(); 

---- редактировать ----

Вы обновили свой код, но он все еще не в порядке. Вы закрываете файл внутри второго цикла:

Когда этот цикл перебирает следующий раз, когда вы по-прежнему пытаетесь писать в файл (а затем снова закройте его, даже если он был закрыт на предыдущей итерации).

+0

Возможно, я осуществил это неправильно, но это не исправило мою проблему. Я обновляю свой код в своем исходном сообщении, чтобы вы могли видеть, как я это сделал. –

+0

hmm now im ничего не получаю в html-файле, он полностью пуст. мой код, чтобы показать, какая часть меня изменила, так как я мог ошибиться –

+0

Я перенес операцию закрытия после второй} после окончания цикла, но теперь мой html-файл пуст и не получает никаких данных из моего метода печати –

0

Вы видите только одну строку в выходном файле, потому что вы переписываете файл каждый раз, когда вы пишете на него.

Если вы должны создать PrintWriter внутри время (номер-строки> = 9 & & < = номер-строки 16) петли, открыть файл в режиме добавления:

новый FileWriter ("output.html", правда,);

исправит вашу проблему.

+0

Это устраняет проблему не всех запись в файл, но создает проблему, что все в файле вместе вместо новых строк. Я попытался исправить это с помощью «\ n» в конце out.println (здесь был напечатан материал), но затем я получаю ошибку, что тип void не разрешен. –

+0

На самом деле вам не нужно обтекать PrintWriter вокруг BufferedWriter, Только BufferedWriter будет работать в вашем случае. Просто вызовите метод write() в объекте BufferedWriter, а затем вызовите метод newLine(). Это должно исправить это. – Suchet

+0

Я изменил свой constuctor на BufferedWriter out = new BufferedWriter ((новый FileWriter ("Output.html"))); но теперь программа can not найдет метод println для out.println –

Смежные вопросы