Может кто-нибудь сказать мне, что делает этот класс Java? Связанный с вводом / выводом - PullRequest
0 голосов
/ 16 апреля 2010

Я относительно новичок в Java и пытаюсь изучить синтаксис ввода / вывода. Может ли кто-нибудь дать мне общий обзор того, что делает этот код? Спасибо !!

import java.io.*;</p> <pre>public class FileReader { private String openFile=""; private String saveFile=""; FileReader(openFile, saveFile) { this.openFile=openFile; this.saveFile=saveFile; } public String process(){ System.out.println(this.openFile); System.out.println(this.saveFile); BufferedReader open=null; FileReader openFR=null; FileWriter save=null; int counter=0; String output=""; if(openFile.equals("")){ return "No open file specifified\n"; } if(this.saveFile.equals("")){ return "No save file specified\n"; } try { openFR = new FileReader(this.openFile); open = new BufferedReader(openFR); } catch (FileNotFoundException e) { return ("Open file no longer exists\n"); } try { save = new FileWriter(saveFile); } catch (IOException e){ return ("Error saving the file\n"); } try{ String temp = open.readLine(); while(temp != null){ temp = open.readLine(); counter++; save.write(output + "\n"); } } catch (IOException e){ e.getStackTrace(); return ("Error reading open file"); } try { save.flush(); } catch (IOException e) { e.printStackTrace(); return ("Error writing save file"); } return "Operation completed successfully"; } }

Ответы [ 6 ]

2 голосов
/ 16 апреля 2010

Это хороший пример того, как не кодировать!

Некоторые проблемы:

  • Не закрывает потоки!
    Это может привести к проблемам из-за заблокированных файлов и / или неполных записанных файлов
  • Не использует исключения или состояния возврата для указания ошибок.
    Если вы хотите знать, была ли операция выполнена успешно, у вас будетсравнить возвращенные строки. Если кто-либо изменит строку, зависимое приложение больше не будет работать.
  • переменные-члены, заданные только в конструкторе, должны быть окончательными
    , поэтому они не могут быть назначены случайно.
  • локальные переменные должны объявляться при необходимости
    объявление их в начале метода является реликтом старых языков
  • неоднозначные исключения не отображаются
    Если возникает исключение, вы 'Вы никогда не узнаете, что это было, вы просто увидите «Ошибка чтения открытого файла»
1 голос
/ 16 апреля 2010

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

Кстати, он не закрывает ни один из файлов.

1 голос
/ 16 апреля 2010

Записывает число counter новых строк в файл сохранения, потому что output всегда равно "". Я думаю, что было бы целесообразно скопировать один файл в другой, но для этого должно быть save.write(temp + "\n");.

0 голосов
/ 16 апреля 2010

Для меня этот код абсолютно ничего не делает, кроме как много ошибок времени компиляции.

Прежде всего, ваше имя класса FileReader конфликтует с java.io.FileReader, поэтому ваш вызов

new FileReader(this.openFile);

на самом деле пытается создать экземпляр ВАШЕГО класса FileReader (для которого нет конструктора, который принимает одну строку), а не java.io.FileReader

Кроме того, этот openFR объявлен как FileReader (ваш FileReader не java.io.FileReader), поэтому вызов

open = new BufferedReader(openFR);

также завершается ошибкой, поскольку BufferedReader ожидает объект java.io.FileReader.

Ваш конструктор для FileReader не объявляет типы аргументов:

FileReader(openFile, saveFile) {
    this.openFile=openFile;
    this.saveFile=saveFile;
}

должно быть:

FileReader(String openFile, String saveFile) {
    this.openFile = openFile;
    this.saveFile = saveFile;
}

Итак, что делает программа после исправления этих ошибок:

Он пытается скопировать файл, прочитав все строки из openFile и записав их в saveFile.

Что он на самом деле делает:

Считывает первую строку из файла и удаляет ее. Входит в цикл, где он продолжает читать строки и увеличивать счетчик (что также неверно, поскольку он никогда не включает в себя первую строку в счетчике, если только целью не является игнорирование первой строки ???). Затем он записывает пустую строку в saveFile для каждой строки в openFile (минус первая строка). Вы также никогда ничего не делаете со значением счетчика, так какой смысл считать его?

0 голосов
/ 16 апреля 2010

Здесь - ссылка на руководство по вводу / выводу Java. Если вы пытаетесь освоить ввод-вывод Java, это лучшая отправная точка.

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

  • Первая строка файла читается и сразу отбрасывается.
  • Каждая прочитанная строка никогда не присваивается «выводу» и, следовательно, никогда не записывается в файл назначения. Единственное, что написано это "\ n".
0 голосов
/ 16 апреля 2010

Он пытается скопировать текстовый файл, но, похоже, есть некоторые ошибки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...