2010-10-29 1 views
0

При попытке сделать некоторые операции с файлами код идет, как это,файла Java

File file=new File("aaa.txt"); 

Я видел в программе BufferedReader и InputStreamReader были включены также вы можете объяснить это с помощью простого примера? Я читал на многих сайтах о работе с файлами, но все еще запутался !!!!

ответ

5

Класс File является файловым дескриптором, который позволяет получить дескриптор файла, но сам по себе не имеет методов для считывания информации из файла.

Вот где InputStreamReader приходит. InputStreamReader (и более легко его подкласс FileReader) сделает чтение для вас (есть и другие способы сделать это, но это один из самых простых).

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

0

Взгляните на этот основной tutorial

В основном BufferedReader это прочитать информацию о файле. Существует несколько способов сделать это и действительно зависит от ваших потребностей.

1
public void printFileContentsToConsole(final String aFileName) { 
//Make a new file. 
File file = new File(aFileName); 

//Declare the reader outside the scope so we can use it 
//in the finally block. 
BufferedReader reader = null; 

try { 
    reader = new BufferedReader(new FileReader(file)); 
    String line; 

    //Read one line at a time, printing it. 
    while ((line = reader.readLine()) != null) { 
    System.out.println(line); 
    } 
} catch (IOException e) { 
    e.printStackTrace(); 
} catch (Exception e) { 
    e.printStackTrace(); 
} finally { 
    try { 
    //Try to close it, this might throw an exception anyway. 
    reader.close(); 
    } catch (Exception ex) { 
    ex.printStackTrace(); 
    } 
} 
} 

Очевидно, имея взгляд на BufferedReader и FileReader API, ответит на многие ваши вопросы об этих конкретных классов.

Чтобы уточнить , почему вы хотите использовать BufferedReader, необходимо эффективно читать в файле по строкам.

+0

Хороший пример, но в блоке finally есть потенциальный NPE (читатель может быть пустым, если в новой строке BufferedReader ... возникает ошибка). –

0

Вот как прочитать файл с диска:

Обратите внимание, что весь код должен быть размещен внутри TRY/поймать заявления, в случае FileNotFoundException, например.

try 
{ 
    //You first have to create a reader that will be used to access the file. 
    //You create the BufferedReader from a FileReader, and you only need to specify 
    //the address of the file on your disk. 
    BufferedReader br = new BufferedReader(new FileReader("fileURL")); 

    String s; 

    //The BufferedReader has a method "readLine" that reads the file line by line 
    //When the reader reaches the end of the file, the method readLine returns null, 
    //so you can control if there is some data remaining or not. 
    while((s = br.readLine()) != null) 
    { 
      System.out.println(s); 
    } 

    //Don't forget to close the reader when the process is over. 
    br.close(); 
} 
catch(Exception e) 
{ 
    // Do some stuff 
} 

Как я помню, классы BufferedReader в FileReader можно найти в пакете java.io;

На мой взгляд, это самый простой способ прочитать файл на Java. Если вам нужно знать, как писать файл, процесс почти такой же, чтобы я мог дать вам совет.

Надеюсь, это поможет.

0

В принципе класс java.io.File представляет собой файл в файловой системе, но не содержит методы для работы с ними (кроме создавать их или удалять их)

Когда вы должны работать с ними, вы используете другие классы из пакета java.io, среди них BufferefReader и InputStreamReader, но таковыми являются другие, такие как FileInputStream.

В зависимости от операции, которую вы хотите выполнить, вы можете использовать считыватель или поток (классы, заканчивающиеся на «Reader» или «Writer», предназначены для текстового контента, классы, заканчивающиеся на «Stream», предназначены для двоичного содержимого, но, конечно, , вы всегда можете читать/писать текст как двоичный).

В большинстве случаев вам нужно «процедить» пару этих классов для выполнения работы. Также важно заметить, что в большинстве случаев вы можете иметь очень похожий код для записи в сокеты.

Наивный пример может быть таким:

package demo; 
import java.io.BufferedReader; 
import java.io.FileReader; 
import java.io.File; 
import java.io.IOException; 

import java.util.List; 
import java.util.ArrayList; 


public class ReadLines { 
    public static void main(String [] args) throws IOException { 
     File toRead = new File(args[0]); 
     if(toRead.exists()) { 
      List<String> lines = readLines(toRead); 
     } else { 
      System.out.println(toRead.getName() + " doesn't exists"); 
     } 
    } 
    private static List<String> readLines(File fromFile) throws IOException { 
      BufferedReader reader = null; 

      List<String> lines = new ArrayList<String>(); 
      try { 
       reader = new BufferedReader(new FileReader(fromFile)); // chaining 
       String line = null; 
       while((line = reader.readLine()) != null) { 
        lines.add(line); 
       } 
     } finally { 
      // always close the file 
      if(reader != null) try { 
       reader.close(); 
      } catch(IOException ioe) { 
       // it's ok to ignore an exception while closing a file 
      } 
     } 
     return lines; 
     } 
    } 

Я надеюсь, что этот код, сделать его более понятным для вас и компилирует ( : PI не имеет компилятора под рукой )

См также :

http://download.oracle.com/javase/tutorial/essential/io/ http://download.oracle.com/javase/6/docs/api/java/io/package-summary.html http://download.oracle.com/javase/6/docs/api/java/io/Reader.html http://download.oracle.com/javase/6/docs/api/java/io/Writer.html http://download.oracle.com/javase/6/docs/api/java/io/InputStream.html http://download.oracle.com/javase/6/docs/api/java/io/OutputStream.html

0

Для ясности, взятый из Javadoc из InputStreamReader.java

An InputStreamReader является мостом от байта потоков символов потоков: Это читает байты и декодирует их в символов с использованием указанная кодировка. [...] Каждое обращение к методу чтения() InputStreamReader может вызывать один или несколько байтов, которые должны быть прочитаны из базового потока ввода-вывода. Чтобы включить эффективное преобразование байтов в символы, больше байт может быть чтения вперед от основного потока , чем необходимо, чтобы удовлетворить текущую операцию чтения .

Для максимальной эффективности, считает оберточной InputStreamReader в BufferedReader. Например:

BufferedReader in = new BufferedReader (новый InputStreamReader (System.in));