Javaを使用してテキストファイルを1行ずつ読み取る必要があります。 FileInputStream
のavailable()
メソッドを使用して、ファイルをチェックしてループします。しかし、読み取り中、ループは最後の行の前の行の後で終了します。 つまり、ファイルに10行ある場合、ループは最初の9行のみを読み取ります。使用されたスニペット:
while(fis.available() > 0)
{
char c = (char)fis.read();
.....
.....
}
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 から取得)
スキャナーの使い方は?スキャナーを使う方が簡単だと思います
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();
}
}
行ごとに読みたい場合は、 BufferedReader
を使用します。 readLine()
メソッドがあり、行を文字列として返します。ファイルの終わりに達した場合はnullを返します。だからあなたは次のようなことをすることができます:
BufferedReader reader = new BufferedReader(new InputStreamReader(fis));
String line;
while ((line = reader.readLine()) != null) {
// Do something with line
}
(このコードは例外を処理したり、ストリームを閉じたりしないことに注意してください)
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();
}
Org.Apache.commons.io.FileUtilsからFileUtilsを試すことができます ここからjarをダウンロードしてみてください
また、次のメソッドを使用できます。FileUtils.readFileToString( "yourFileName");
お役に立てば幸いです。
コードが最後の行をスキップしたのは、fis.available() > 0
ではなくfis.available() >= 0
を使用したためです
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;
}
//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);
}
}
}
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());
}
}
}
このように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();
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);
File file = new File("Path");
FileReader reader = new FileReader(file);
while((ch=reader.read())!=-1)
{
System.out.print((char)ch);
}
これは私のために働いた
動作するはずのユーザースキャナー
Scanner scanner = new Scanner(file);
while (scanner.hasNextLine()) {
System.out.println(scanner.nextLine());
}
scanner.close();
はい、パフォーマンスを向上させるにはバッファリングを使用する必要があります。 BufferedReader OR byte []を使用して一時データを保存します。
ありがとう。
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);
}
}