これはコードスニペットですが、基本的には「listings.txt」という名前のファイルから読み取り、「overview.txt」という名前のファイルに書き込みます。 'listings.txt'から情報を取り出し、そのまま 'overview.txt'に入れたい(残りは後でわかります)。
ファイル「overview.txt」が作成され、ファイル「listings.txt」をループして「overview.txt」に書き込むように見えます。ただし、ファイル 'overview.txt'を開くと、空になります。
誰かが私のコードを一瞥して、何か間違っていることに気付くことができますか?
package yesOverview;
import Java.io.BufferedReader;
import Java.io.*;
import Java.io.File;
import Java.io.FileNotFoundException;
import Java.io.PrintWriter;
import Java.util.Scanner;
import Java.util.logging.Level;
import Java.util.logging.Logger;
public class yesOverview {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
String strInput = "foo.bar";
System.out.print("Please enter the listings file (the full path to the file): ");
strInput = input.next();
//This makes sure that the inputed file is listings.txt as required for KET1 task 2
while (strInput.contains("listings.txt") == false) {
System.out.print("Incorrect file. Please enter listings file(the full path to the file): ");
strInput = input.next();
}
infos(strInput);
input.close();
}
public static void infos(String strInput) {
Scanner input2 = new Scanner(System.in);
System.out.print("Please enter the overview.txt file (the full path to the file): ");
String strInput2 = "foo.bar";
strInput2 = input2.next();
//This also makes sure that the overview.txt file is provided.
while (strInput2.contains("overview.txt") == false) {
System.out.print("Incorrect file. Please enter overview file(the full path to the file): ");
strInput2 = input2.next();
}
//Creates the file f then places it in the specified directory.
File f = new File(strInput2);
try {
//Creates a printerwriter out that writes to the output file.
PrintWriter out = new PrintWriter(strInput2);
} catch (FileNotFoundException ex) {
Logger.getLogger(KETTask2Overview.class.getName()).log(Level.SEVERE, null, ex);
}
//String that holds the value of the next line.
String inputLine = "";
//Creates the Buffered file reader / writer.
try {
BufferedReader in = new BufferedReader(new FileReader(strInput));
FileWriter fstream = new FileWriter(strInput2);
BufferedWriter out = new BufferedWriter(fstream);
while (in.readLine() != null) {
out.write(in.read());
}
in.close();
} catch (IOException e) {
System.err.println("Error: " + e.getMessage());
}
}
}
これを試して
BufferedWriterストリームを閉じます(つまり、out.close())
next()は単一のWordしか取り込めないため、next()の代わりにnextLine()を使用してみてください。ただし、完全な行にはnextLine()を使用しますが、これはここでは問題ではないようです。
ファイルの読み取りと書き込みが必要な場合は、通常、次の手順に従います。
ファイルからの読み取り用
File f = new File("my.txt");
FileReader fr = new FileReader(f);
BufferedReader br = new BufferedReader(fr);
String s = null;
while ((br.readLine())!=null) {
// Do whatever u want to do with the content of the file,eg print it on console using SysOut...etc
}
br.close();
ファイルへの書き込みの場合:
Boolean isDone = true;
Scanner scan = new Scanner(System.in);
File f = new File("my.txt");
FileWriter fr = new FileWriter(f);
BufferedWriter br = new BufferedWriter(fr);
while (isDone) {
if (!isDone) {
br.write(new Scanner(System.in).nextLine());
}
}
public static long copy (Reader input, Writer output) throws IOException {
char[] buffer = new char[8192];
long count = 0;
int n;
while ((n = input.read( buffer )) != -1) {
output.write( buffer, 0, n );
count += n;
}
return count;
}
使用例:
copy( reader, new FileWriter( file ) );
あなたは締めくくりではありません。 writeListメソッドのfinallyブロックは、BufferedWriterをクリーンアップしてから閉じます。
finally {
if (out != null) {
System.out.println("Closing BufferedWriter");
out.close();
} else {
System.out.println("BufferedWriter not open");
}
}