程序逐行读取文件
如果程序在行[@: Object successfully summoned]
中找到,则不会写入第二个文件
可能问题出在try / catch / finally部分。我已经尝试了很多次更改,但我无法解决问题。
这就是我编程的内容:
package stringsHerkennen;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
public class MC {
private static PrintWriter outputFile;
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException{
FileInputStream fstream = null;
FileWriter fwriter = null;
fstream = new FileInputStream("C:\\Users\\Tim\\Documents\\test.txt");
BufferedReader br = new BufferedReader(new InputStreamReader(fstream));
String strLine;
fwriter = new FileWriter("bewerkte log.txt", true);
outputFile = new PrintWriter(fwriter);
try{
while ((strLine = br.readLine()) !=null) {
try{
System.out.println(strLine);
String b = strLine;
String tokens[] = strLine.split("]: ");
String c = tokens[1].toString();
//System.out.println(tokens[1]);
Hamming H = new Hamming("[@: Object successfully summoned]", c);
int Pi = H.getHammingDistance();
//System.out.println(Pi);
if(!(Pi==0)){
//System.out.println("geschreven naar file");
outputFile.println(b);
//System.out.println("schrijven naar andere file");
}
else{
//System.out.println("niet geschreven naar file");
}
//try2
}
catch(Exception ArrayIndexOutOfBoundsException){
//System.out.println("Schrijven naar File");
outputFile.println(strLine);
}
finally {
if (fstream != null)
fstream.close();}
}
//try1
}
catch(Exception ArrayIndexOutOfBoundsException){
fstream.close();
br.close();
}
finally {
if (fstream != null)
fstream.close();}
System.out.println("klaar");
}
}
这是您要过滤的文本文件
sun.nio.cs.StreamDecoder.readBytes(Unknown Source) ~[?:1.7.0_13]#- at
sun.nio.cs.StreamDecoder.implRead(Unknown Source) ~[?:1.7.0_13]
at sun.nio.cs.StreamDecoder.read(Unknown Source) ~[?:1.7.0_13]
at java.io.InputStreamReader.read(Unknown Source) ~[?:1.7.0_13]
at java.io.BufferedReader.fill(Unknown Source) ~[?:1.7.0_13]
at java.io.BufferedReader.readLine(Unknown Source) ~[?:1.7.0_13]
at java.io.BufferedReader.readLine(Unknown Source) ~[?:1.7.0_13]
at ll.run(SourceFile:78) [minecraft_server.1.7.2.exe:?]
[15:39:13] [Server thread/INFO]: Starting minecraft server version 1.7.2
[15:39:13] [Server thread/INFO]: Loading properties
[15:39:13] [Server thread/INFO]: Default game type: SURVIVAL
[15:39:13] [Server thread/INFO]: Generating keypair
[15:39:13] [Server thread/INFO]: Starting Minecraft server on *:25565
[15:39:13] [Server thread/INFO]: Preparing level "world 3"
[15:39:13] [Server thread/INFO]: Preparing start region for level 0
[15:39:14] [Server thread/INFO]: Done (0,820s)! For help, type "help" or "?"
[17:09:01] [Server thread/INFO]: [@: Object successfully summoned]
[17:09:01] [Server thread/INFO]: [@: Object successfully summoned]
[17:09:01] [Server thread/INFO]: [@: Object successfully summoned]
[17:09:01] [Server thread/INFO]: [@: Object successfully summoned]
[17:09:02] [Server thread/INFO]: [@: Object successfully summoned]
[17:09:02] [Server thread/INFO]: [@: Object successfully summoned]
[17:09:02] [Server thread/INFO]: [@: Object successfully summoned]
[17:09:02] [Server thread/INFO]: [@: Object successfully summoned]
[17:09:02] [Server thread/INFO]: [@: Object successfully summoned]
[17:09:02] [Server thread/INFO]: [@: Object successfully summoned]
答案 0 :(得分:0)
您的代码有点乱,难以理解。我写的更像这样:
package stringsHerkennen;
import java.io.*;
public class MC {
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
FileInputStream fstream = null;
FileWriter fwriter = null;
PrintWriter outputFile = null;
try {
fstream = new FileInputStream("C:\\Users\\Tim\\Documents\\test.txt");
BufferedReader br = new BufferedReader(new InputStreamReader(fstream));
String strLine;
fwriter = new FileWriter("bewerkte log.txt", true);
outputFile = new PrintWriter(fwriter);
while ((strLine = br.readLine()) != null) {
String tokens [] = strLine.split("]: ");
if ((tokens != null) && (tokens.length > 0)) {
Hamming H = new Hamming("[@: Object successfully summoned]", tokens[1]);
int Pi = H.getHammingDistance();
if (Pi != 0) {
outputFile.println(b);
} else {
}
}
}
} catch (IOException e) {
e.printStackTrace();
} finally {
closeQuietly(outputFile);
closeQuietly(fwriter);
closeQuietly(fstream);
}
}
public static void closeQuietly(InputStream is) {
try {
if (is != null) {
is.close();
}
} catch (IOException e) {
// Quietly....log the exception if you like
}
}
public static void closeQuietly(Reader r) {
try {
if (r != null) {
r.close();
}
} catch (IOException e) {
// Quietly....log the exception if you like
}
}
public static void closeQuietly(Writer w) {
try {
if (w != null) {
w.close();
}
} catch (IOException e) {
// Quietly....log the exception if you like
}
}
}
答案 1 :(得分:0)
我认为将代码放在Catch块中是不好的做法。但是,您是否正在刷新PrintWriter的输出?
outputFile.flush();
如果没有将内容放入第二个文件,可能就是你要找的东西。
答案 2 :(得分:0)
1)删除while循环中的finally块 2)在循环
之后的finally块中添加outputFile.flush() //try2
} catch (Exception ArrayIndexOutOfBoundsException) {
//System.out.println("Schrijven naar File");
outputFile.println(strLine);
}
//**COMMENT this fstream is being closed in the while loop !!!
/*finally {
if (fstream != null)
fstream.close();
}*/
}
//try1
} catch (Exception ArrayIndexOutOfBoundsException) {
fstream.close();
br.close();
} finally {
outputFile.flush(); // ADD THIS TO FLUSH TO DISK
if (fstream != null)
fstream.close();
}
System.out.println("klaar");