Java - как читать из файла, когда я использовал PrintWriter, BufferedWriter и FileWriter для записи?
у меня есть метод, который записывает данные в файл. Я использую PrintWriter
, BufferedWriter
и FileWriter
как показано ниже
public void writeToFile(String FileName){
PrintWriter pw = null;
try {
pw = new PrintWriter(new BufferedWriter(new FileWriter(FileName)));
for(Cars car : list){
pw.println(car.getType());
pw.println(car.getMaxSpeed());
pw.println(car.getOwner());
pw.println();
pw.flush();
}
pw.close();
}
catch(IOException ex){
System.err.println(ex);
}
}
теперь, как я могу прочитать данные из файла? Я пытался использовать InputStreamReader
, BufferedReader
и FileInputStream
, но мой NetBeans показывает мне сообщение об ошибке
public void readFromFile() throws IOException {
InputStreamReader fr = null;
try {
fr = new InputStreamReader(new BufferedReader(new FileInputStream(new FileReader("c:cars.txt"))));
System.out.println(fr.read());
} catch (Exception ex) {
System.out.println(ex.getMessage());
} finally {
fr.close();
}
}
что не так с этим методом?
3 ответов
BufferedReader in = new BufferedReader(new FileReader("file.in"));
FileWriter fstream = new FileWriter("file.out");
BufferedWriter out = new BufferedWriter(fstream);
String line = in.readLine(); // <-- read whole line
StringTokenizer tk = new StringTokenizer(line);
int a = Integer.parseInt(tk.nextToken()); // <-- read single word on line and parse to int
out.write(""+a);
out.flush();
в вашем коде есть несколько проблем:
1) InputStreamReader принимает InputStream в качестве аргумента, а не читателя. См.http://docs.oracle.com/javase/6/docs/api/java/io/InputStreamReader.html.
2) FileInputStream также не принимает Reader в качестве аргумента (он принимает файл, FileDescriptor или строку). Смотри:http://docs.oracle.com/javase/6/docs/api/java/io/FileInputStream.html
3) A Командой bufferedreader считывает файл линии обычно линия. Метод read() считывает только один символ.
возможным решением может быть:
fr = new BufferedReader(new InputStreamReader(new FileInputStream(new File("c:\cars.txt"))));
String line = "";
while((line = fr.readLine()) != null) {
System.out.println(line);
}
Btw: другим было бы легче помочь вам, если вы предоставите точное сообщение об ошибке или даже лучше StackTrace.
ошибки: не удается разрешить конструктор FileInputStream (java.Ио.FileReader)', требуемый конструктор не существует в API.
у вас оригинальный код был:
new PrintWriter(new BufferedWriter(new FileWriter(FileName)));
так что для чтения вам нужно
new PrintReader(new BufferedReader(new FileReader(FileName)));
но PrintReader не нужен (не существует), поэтому все, что вам нужно, это:
new BufferedReader(new FileReader(FileName))
PrinterWriter печатает форматированные представления объектов в поток вывода текста, но при чтении текст всегда форматируется, поэтому PrinterReader не существовать.
вы пишете строку за строкой, поэтому Читайте также строку за строкой:) пример:
public void readFromFile() throws IOException {
BufferedReader bufferedReader = null;
try {
String sCurrentLine;
bufferedReader = new BufferedReader(new FileReader("c:\cars.txt"));
while ((sCurrentLine = bufferedReader.readLine()) != null) {
System.out.println(sCurrentLine);
}
} catch (Exception ex) {
System.out.println(ex.getMessage());
} finally {
bufferedReader.close();
}
}
или лучше (JDK7)
void readFromFile() throws IOException {
Path path = Paths.get("c:\cars.txt");
try (BufferedReader reader = Files.newBufferedReader(path, Charset.defaultCharset())){
String line = null;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
}
}