Dan*_*ard 1 java file-io bufferedreader java.util.scanner
我在Java中做了一些相对简单的I/O. 我有一个.txt文件,我正在阅读使用扫描仪和.txt文件,我正在使用BufferedWriter写.然后另一个Scanner读取该文件,然后另一个BufferedWriter创建另一个.txt文件.我提供了下面的代码以防万一,但我不知道它是否会有太多帮助,因为我不认为代码是这里的问题.代码编译没有任何错误,但它没有做我期望的.由于某种原因,charReader只读取其文件的大约一半,然后hasNext()将返回false,即使文件末尾尚未到达.这些不是大文本文件 - statsReader的文件是34 KB,而charReader的文件是29 KB,甚至更奇怪,因为statsReader读取整个文件很好,而且它更大!此外,我确实有一个try/catch包围的代码,我只是没有包含它.
从我在网上看到的情况来看,这可能发生在非常大的文件中,但这些文件非常小,所以我很丢失.
我的操作系统是Windows 7 64位.
Scanner statsReader = new Scanner(statsFile);
BufferedWriter statsWriter = new BufferedWriter(new FileWriter(outputFile));
while (statsReader.hasNext()) {
statsWriter.write(statsReader.next());
name = statsReader.nextLine();
temp = statsReader.nextLine();
if (temp.contains("form")) {
name += " " + temp;
temp = statsReader.next();
}
statsWriter.write(name);
statsWriter.newLine();
statsWriter.write(temp);
if (! (temp = statsReader.next()).equals("-"))
statsWriter.write("/" + temp);
statsWriter.write("\t");
statsWriter.write(statsReader.nextInt() + "\t");
statsWriter.write(statsReader.nextInt() + "\t");
statsWriter.write(statsReader.nextInt() + "\t");
statsWriter.write(statsReader.nextInt() + "\t");
statsWriter.write(statsReader.nextInt() + "\t");
statsWriter.write(statsReader.nextInt() + "");
statsWriter.newLine();
statsReader.nextInt();
}
Scanner charReader = new Scanner(charFile);
BufferedWriter codeWriter = new BufferedWriter(new FileWriter(codeFile));
while (charReader.hasNext()) {
color = charReader.next();
name = charReader.nextLine();
name = name.replaceAll("\t", "");
typing = pokeReader.next();
place = charReader.nextInt();
area = charReader.nextInt();
def = charReader.nextInt();
shape = charReader.nextInt();
size = charReader.nextInt();
spe = charReader.nextInt();
index = typing.indexOf('/');
if (index == -1) {
typeOne = determineType(typing);
typeTwo = '0';
}
else {
typeOne = determineType(typing.substring(0, index));
typeTwo = determineType(typing.substring(index+1, typing.length()));
}
}
Run Code Online (Sandbox Code Playgroud)
SSCCE:
public class Tester {
public static void main(String[] args) {
File statsFile = new File("stats.txt");
File testFile = new File("test.txt");
try {
Scanner statsReader = new Scanner(statsFile);
BufferedWriter statsWriter = new BufferedWriter(new FileWriter(testFile));
while (statsReader.hasNext()) {
statsWriter.write(statsReader.nextLine());
statsWriter.newLine();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud)
}
这是一个经典问题:在读取文件之前,您需要flush和close输出流(在本例中statsWriter).
被缓冲后,它实际上并没有通过调用来写入文件write.调用flush强制它完成任何挂起的写操作.
这是OutputStream.flush()的javadoc :
刷新此输出流并强制写出任何缓冲的输出字节.flush的一般契约是调用它表示,如果先前写入的任何字节已被输出流的实现缓冲,则应立即将这些字节写入其预期目的地.
| 归档时间: |
|
| 查看次数: |
852 次 |
| 最近记录: |