2013-11-22 3 views
0

Это весело. Я был бы признателен за любую помощь, и никакие предыдущие вопросы о stackoverflow не указывают меня в нужном месте. Документы также не очень помогли мне.FileReader FileNotFoundException при передаче встроенного файла

Меня бросили FileNotFoundException с этим блоком кода:

public static int wordOccurance(Word t, File D) throws FileNotFoundException 
{ 
    int occurance = 0; 

    BufferedReader mainReader = new BufferedReader(new FileReader(D)); 
    Scanner kb = new Scanner(mainReader); 

Мой файл тестер не вызывает, чтобы это произошло: то есть. «File tester = new File (« C: \ read.txt »);

Но проблема возникает только когда я прохожу файл, построенный по этому методу:

public static File makeAndCombineFile(String FileOne, String FileTwo) throws IOException 
{ 
    BufferedReader mainReader = null;// null holder value for the later useful bufferedReader 
    Scanner kb = null;// null holder for later useful Scanner 
    StringBuilder sb = new StringBuilder(); 

ДРУГИЕ УСЛОВИЯ между этими двумя кусками. САМЫЙ НИЧЕГО НЕ ИСТИННЫЙ. ТАКЖЕ ВОЗВРАЩАЙТЕ ФАЙЛ, ТОЛЬКО, ЕСЛИ ОДИН ВХОД ВМЕСТЕ.

else //in case both are good to go and obviously not null 
    { 
     mainReader = new BufferedReader(new FileReader(FileOne)); 
     kb = new Scanner(mainReader); 
     while(kb.hasNext()) 
      sb.append(kb.nextLine() + "\n"); 
     mainReader = new BufferedReader(new FileReader(FileTwo)); 
     kb = new Scanner(mainReader); 
     while(kb.hasNext()) 
      sb.append(kb.nextLine()+ "\n"); 

     kb.close(); 
     return new File(sb.toString()); 
    } 
} 

ответ

0

Это мне потребовалось некоторое время, чтобы выяснить, что здесь происходит, но он смотрит на меня, как вы думаете, что эта линия:

return new File(sb.toString()); 

создает файл на диске, содержащем текст, считанный из два сканера. Это не так. Создает файл java.io.File, который в основном представляет собой путь к файлу; путь, представленный этим File, - это данные, считываемые с сканеров. Другими словами, если FileOne и FileTwo содержали текст в Война и мир, тогда путь, представленный этим файлом, был бы текстом Война и мир. Файл не будет создан на диске; никакие данные не будут записаны на него. Вы только что создали объект, который ссылается на файл, который не существует.

Используйте FileWriter, возможно, в сочетании с PrintWriter, чтобы сохранить текст текста в файл; то вы можете создать объект File, содержащий имя этого файла, и передать его в другую программу:

PrintWriter pw = new PrintWriter(new FileWriter("somename.txt")); 
while(kb.hasNext()) 
    pw.println(kb.nextLine()); 
pw.close(); 
return new File("somename.txt"); 
+0

Ах да, я понимаю ваш мыслительный процесс. Однако я понимаю, что не пишу на диск. Если FileOne и FileTwo являются копиями «Войны и мира», я просто хочу, чтобы объект (Файл) представлял обе пюре вместе. По сути, просто дважды создайте в нем объект File with War and Peace. – user3022479

+0

О! Я понимаю, что вы имеете в виду сейчас! Ну, теперь, когда я на правильном пути, я не могу не задаться вопросом, почему создание файла из другого файла запрещено. Это кажется немного лишним. – user3022479

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