Чтение данных из текстового файла с использованием Java - PullRequest
9 голосов
/ 19 мая 2010

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

while(fis.available() > 0)
{
    char c = (char)fis.read();
    .....
    .....
}

Ответы [ 17 ]

14 голосов
/ 19 мая 2010

Не следует использовать 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)

12 голосов
/ 19 мая 2010

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

     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 можно прочитать здесь

3 голосов
/ 19 мая 2010
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 голосов
/ 19 мая 2010

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

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

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

2 голосов
/ 11 мая 2011

Вы можете попробовать FileUtils из org.apache.commons.io.FileUtils, попробовать загрузить jar отсюда

и использовать следующий метод: FileUtils.readFileToString ("yourFileName");

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

1 голос
/ 04 мая 2015

В Java 8 вы можете легко превратить ваш текстовый файл в список строк с потоками, используя Files.lines и collect:

private List<String> loadFile() {
    URI uri = null;
    try {
        uri = ClassLoader.getSystemResource("example.txt").toURI();
    } catch (URISyntaxException e) {
        LOGGER.error("Failed to load file.", e);
    }
    List<String> list = null;
    try (Stream<String> lines = Files.lines(Paths.get(uri))) {
        list = lines.collect(Collectors.toList());
    } catch (IOException e) {
        LOGGER.error("Failed to load file.", e);
    }
    return list;
}
1 голос
/ 24 ноября 2014

Причина, по которой ваш код пропустил последнюю строку, была в том, что вы поставили fis.available() > 0 вместо fis.available() >= 0

1 голос
/ 14 октября 2017
//The way that I read integer numbers from a file is...

import java.util.*;
import java.io.*;

public class Practice
{
    public static void main(String [] args) throws IOException
    {
        Scanner input = new Scanner(new File("cards.txt"));

        int times = input.nextInt();

        for(int i = 0; i < times; i++)
        {
            int numbersFromFile = input.nextInt();
            System.out.println(numbersFromFile);
        }




    }
}
0 голосов
/ 05 августа 2015
public class FilesStrings {

public static void main(String[] args) throws FileNotFoundException, IOException {
    FileInputStream fis = new FileInputStream("input.txt");
    InputStreamReader input = new InputStreamReader(fis);
    BufferedReader br = new BufferedReader(input);
    String data;
    String result = new String();

    while ((data = br.readLine()) != null) {
        result = result.concat(data + " ");
    }

    System.out.println(result);
0 голосов
/ 03 октября 2014
BufferedReader br = new BufferedReader(new FileReader(file));
String line;
while ((line = br.readLine()) != null) {
// process the line.
}
br.close(); // close bufferreader after use
...