Обработка файлов Java - PullRequest
       26

Обработка файлов Java

0 голосов
/ 29 октября 2010

При попытке выполнить какую-либо операцию с файлами код выглядит следующим образом:

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

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

Ответы [ 6 ]

5 голосов
/ 29 октября 2010

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

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

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

1 голос
/ 29 октября 2010
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();
  }
 }
}

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

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

0 голосов
/ 29 октября 2010

Для ясности взят из javadoc InputStreamReader.java

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

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

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

0 голосов
/ 29 октября 2010

В основном класс 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 голосов
/ 29 октября 2010

Вот как я читаю файл с диска:

Обратите внимание, что весь код должен быть помещен в оператор try / catch, например, в случае 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 голосов
/ 29 октября 2010

Взгляните на этот базовый учебник

В основном BufferedReader - это чтение информации о файле. Есть несколько способов сделать это, и это зависит от ваших потребностей.

...