2015-04-05 1 views
0

Моя задача заключается в следующем:Чтение из текстового файла и пытается использовать PrintWriter написать еще результатов в пустой файл

написать программу, которая считывает прилагаемый текстовый файл и записывает отдельный текст файл (используя ваше первое имя и фамилию в качестве имени файла). Новый текстовый файл должен содержать все те же строки текста, что и входной файл, с добавлением номера строки, добавленного в качестве первого символа в строке.

Ex: если ваша входная строка гласит:

это тест

результат должен прочитать

  1. это тест

Я написал что, по моему мнению, в основном функциональный код - при его компиляции и создании нового файла, который должен быть записан, но это файл пуст (содержит 0 байтов). Понимая проблему, я попытался убедиться, что мои printWriter и потоки ввода/вывода были закрыты/сброшены. Я не уверен, в этот момент, что-то не так с моим циклом, или если я вызываю методы закрытия в неправильном месте. Любая помощь приветствуется.

код выглядит следующим образом:

package module6lecture; 

import java.util.Scanner; 
import java.io.FileNotFoundException; 
import java.io.PrintWriter; 
import java.io.FileInputStream; 
import java.io.FileOutputStream; 

public class ReadWriteProgram { 

public static void main(String[] args) { 
    try 
    { 
     FileInputStream fis = new FileInputStream("C:\\Users\\Reid\\Desktop\\Chapter11.txt"); 
     FileOutputStream fos = new FileOutputStream("C:\\Users\\Reid\\Desktop\\rulicny.txt"); 
     Scanner scan = new Scanner(fis); 
     PrintWriter pw = new PrintWriter(fos); 
     int lineNumber = 1; 
     while(scan.hasNextLine()); 
     { 
      String stringRead = scan.nextLine(); 
      pw.println(lineNumber + ": " + stringRead); 
      lineNumber++; 
     } 
     pw.close(); 
    } 
    catch(FileNotFoundException fnf) 
    { 
     System.out.println("Unable to find Chapter11.txt. Exiting..."); 
     fnf.printStackTrace(); 
    } 
} 
} 

Отказ от ответственности: Я весь Newb.

+0

Попробуйте добавить несколько копий в свой код, чтобы узнать, достигнуты ли места. Самое главное, строка записи. – Constant

+0

Похоже, у вас есть то же самое назначение, что и [этот парень] (http://stackoverflow.com/questions/29456696/modify-contents-of-text-file-and-write-to-new-file-in-java). –

ответ

1

Там находится точка с запятой сразу после во время цикла

while(scan.hasNextLine()); 
//      ^

, что делает его зацикливание, так как она представляет собой пустую команду, так же, как

while(scan.hasNextLine()){} 

так что вы никогда не фактического ввода

{ 
    String stringRead = scan.nextLine(); 
    pw.println(lineNumber + ": " + stringRead); 
    lineNumber++; 
} 

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

FileOutputStream fos = new FileOutputStream("C:\\Users\\Reid\\Desktop\\rulicny.txt"); 

Итак, удалите эту точку с запятой.

BTW вы можете легко обнаружить такие ошибки, если вы дадите свой код формата IDE для вас. Eclipse, отформатировал пример для меня, как

while (scan.hasNextLine()) 
    ; 
{ 
    String stringRead = scan.nextLine(); 
    pw.println(lineNumber + ": " + stringRead); 
    lineNumber++; 
} 

, который, как вы видите, показывает, что это вполне хорошо, что ваш цикл фактически выполняет пустое заявление вместо кодового блока.

+0

Это, похоже, решило одну проблему. Выходной файл печатается, но он просто печатает первую строку входного файла в бесконечном цикле. Что мне нужно сделать, чтобы заставить сканер читать строки в последовательности? – phasevii

+0

Странно, после удаления этой дополнительной точки с запятой ваш код отлично работает для меня. Рассмотрите возможность совместного использования текущей версии вашего кода (но не изменяйте свой исходный вопрос, так как он неверно дал бы ответы), отправив его, например, на pastebin.com. – Pshemo

+0

Я немного поработал с ним, а затем решил попробовать отменить все мои изменения до того момента, когда я был прав, прежде чем удалять точку с запятой, снова удалить ее и вот, как вы говорите, она работает отлично. Не уверен, что я изменил, но большое спасибо! – phasevii

0

Попробуйте предопределить String stringRead вне цикла.