web-dev-qa-db-ja.com

Javaを使用してテキストファイルからデータを読み取る

Javaを使用してテキストファイルを1行ずつ読み取る必要があります。 FileInputStreamavailable()メソッドを使用して、ファイルをチェックしてループします。しかし、読み取り中、ループは最後の行の前の行の後で終了します。 つまり、ファイルに10行ある場合、ループは最初の9行のみを読み取ります。使用されたスニペット:

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

available()は使用しないでください。それはこれまで何も保証しません。 available() のAPIドキュメントから:

このメソッドの次の呼び出しでブロックすることなく、この入力ストリームから読み取る(またはスキップする)ことができるバイト数のestimateを返します入力ストリーム。

あなたはおそらく次のようなものを使いたいでしょう

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
aioobe

スキャナーの使い方は?スキャナーを使う方が簡単だと思います

     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 here)の詳細を読む

11
vodkhang

行ごとに読みたい場合は、 BufferedReader を使用します。 readLine()メソッドがあり、行を文字列として返します。ファイルの終わりに達した場合はnullを返します。だからあなたは次のようなことをすることができます:

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

(このコードは例外を処理したり、ストリームを閉じたりしないことに注意してください)

3
Chris
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
Richard H

Org.Apache.commons.io.FileUtilsからFileUtilsを試すことができます ここからjarをダウンロードしてみてください

また、次のメソッドを使用できます。FileUtils.readFileToString( "yourFileName");

お役に立てば幸いです。

2
Kallathiyan

コードが最後の行をスキップしたのは、fis.available() > 0ではなくfis.available() >= 0を使用したためです

1
JimmyBob23

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
Kris
//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);
        }




    }
}
1
Abdullah Ahmad

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
Incognito

このように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
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
marycrete
    File file = new File("Path");

    FileReader reader = new FileReader(file);  

    while((ch=reader.read())!=-1)
    {
        System.out.print((char)ch);
    }

これは私のために働いた

0
MIG007

動作するはずのユーザースキャナー

         Scanner scanner = new Scanner(file);
         while (scanner.hasNextLine()) {
           System.out.println(scanner.nextLine());
         }
         scanner.close(); 
0
Gautam

はい、パフォーマンスを向上させるにはバッファリングを使用する必要があります。 BufferedReader OR byte []を使用して一時データを保存します。

ありがとう。

0
Parth
public class ReadFileUsingFileInputStream {

/**
* @param args
*/
static int ch;

public static void main(String[] args) {
    File file = new File("C://text.txt");
    StringBuffer stringBuffer = new StringBuffer("");
    try {
        FileInputStream fileInputStream = new FileInputStream(file);
        try {
            while((ch = fileInputStream.read())!= -1){
                stringBuffer.append((char)ch);  
            }
        }
        catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    System.out.println("File contents :");
    System.out.println(stringBuffer);
    }
}
0
Jayanta Rout