Считайте данные с текстового файла с помощью Java

Я должен считать текстовый файл линию за линией с помощью Java. Я использую available() метод FileInputStream проверять и циклично выполняться по файлу. Но при чтении, цикл завершается после строки перед последней. т.е. если файл имеет 10 строк, цикл читает только первые 9 строк. Snippet использовал:

while(fis.available() > 0)
{
    char c = (char)fis.read();
    .....
    .....
}
9
задан tshepang 6 October 2014 в 11:10
поделиться

7 ответов

Попробуйте использовать java.io.BufferedReader вот так.

java.io.BufferedReader br = new java.io.BufferedReader(new java.io.InputStreamReader(new java.io.FileInputStream(fileName)));
String line = null;
while ((line = br.readLine()) != null){
//Process the line
}
br.close();
0
ответ дан 4 December 2019 в 06:55
поделиться
String file = "/path/to/your/file.txt";

try {

    BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(file)));
    String line;
    // Uncomment the line below if you want to skip the fist line (e.g if headers)
    // line = br.readLine();

    while ((line = br.readLine()) != null) {

        // do something with line

    }
    br.close();

} catch (IOException e) {
    System.out.println("ERROR: unable to read file " + file);
    e.printStackTrace();   
}
3
ответ дан 4 December 2019 в 06:55
поделиться

Как насчет использования сканера? Я думаю, что использовать Scanner проще

     private static void readFile(String fileName) {
       try {
         File file = new File(fileName);
         Scanner scanner = new Scanner(file);
         while (scanner.hasNextLine()) {
           System.out.println(scanner.nextLine());
         }
         scanner.close();
       } catch (FileNotFoundException e) {
         e.printStackTrace();
       }
     }

Подробнее о Java IO здесь

11
ответ дан 4 December 2019 в 06:55
поделиться

Да, для повышения производительности следует использовать буферизацию. Используйте BufferedReader OR byte [] для хранения временных данных.

спасибо.

0
ответ дан 4 December 2019 в 06:55
поделиться

Попробуйте поискать в Google.

import java.io.*;
class FileRead 
{
   public static void main(String args[])
  {
      try{
    // Open the file that is the first 
    // command line parameter
    FileInputStream fstream = new FileInputStream("textfile.txt");
    // Get the object of DataInputStream
    DataInputStream in = new DataInputStream(fstream);
        BufferedReader br = new BufferedReader(new InputStreamReader(in));
    String strLine;
    //Read File Line By Line
    while ((strLine = br.readLine()) != null)   {
      // Print the content on the console
      System.out.println (strLine);
    }
    //Close the input stream
    in.close();
    }catch (Exception e){//Catch exception if any
      System.err.println("Error: " + e.getMessage());
    }
  }
}
0
ответ дан 4 December 2019 в 06:55
поделиться

Вы не должны использовать available () . Никаких гарантий это не дает. Из документации API available () :

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

Вероятно, вы захотите использовать что-то вроде

try {
    BufferedReader in = new BufferedReader(new FileReader("infilename"));
    String str;
    while ((str = in.readLine()) != null)
        process(str);
    in.close();
} catch (IOException e) {
}

(взято из http://www.exampledepot.com/egs/java.io/ReadLinesFromFile.html )

14
ответ дан 4 December 2019 в 06:55
поделиться

Если вы хотите читать построчно, используйте BufferedReader . Он имеет метод readLine () , который возвращает строку в виде String или null, если достигнут конец файла. Таким образом, вы можете сделать что-то вроде:

BufferedReader reader = new BufferedReader(new InputStreamReader(fis));
String line;
while ((line = reader.readLine()) != null) {
 // Do something with line
}

(Обратите внимание, что этот код не обрабатывает исключения, не закрывает поток и т. Д.)

3
ответ дан 4 December 2019 в 06:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: