我正在使用以下命令创建注册表快照: Runtime.getRuntime().exec("REG EXPORT HKLM "+ pathVariable + "\HKLM.txt/y");
然后我解析这个文件,试图将注册表条目分组到一个字符串中,因为它们通常被分解成多行。当我使用这段代码时,我总是得到每个偶数字符的“NUL”字符。
String line, concatLine;
Scanner scanner;
try {
scanner = new Scanner(myFile);
line = null;
concatLine = "";
while(scanner.hasNextLine()){
line = scanner.nextLine();
if(line !=null && !(line.isEmpty())){
concatLine += line;
}
else if(!(concatLine.equals(""))){
System.out.println(concatLine);
concatLine = "";
}
}
} catch (IOException e) {//Catch I/O Exceptions
System.err.println(e);
}
我在 NP++ 中扫描文件之前查看文件,没有“NUL”字符,但如果我将这些连接的行写入文件,整个文件在每个预期字符之间都有它们。
最佳答案
在我寻找理解我遇到的问题的过程中 Java reading and writing paractices 这绝对值得一看。除此之外,早期的评论似乎是正确的。如果文件作为 UTF-16 流打开并写入,则输出没有空字符。顺便说一句,您还需要处理注册表转储中的转义换行符,因为如果不这样做,您最终会得到类似:“00,00,\00”的内容,而您应该在其中使用“00,00,00 ”。
这是一个例子:
import java.io.*;
import java.util.*;
import static java.lang.System.out;
public class ReadReg {
public static void main(String[] argv){
String line=null; StringBuilder sb = new StringBuilder();
Scanner scanner;
FileOutputStream fos;
BufferedOutputStream bos; OutputStreamWriter fosw;
try {
scanner = new Scanner(new File("hklm-hw.txt"), "UTF-16");
fos = new FileOutputStream("hklm-hw.cat.txt");
bos = new BufferedOutputStream(fos);
fosw = new OutputStreamWriter(bos, "UTF-16");
while (scanner.hasNextLine()) {
sb.append( line = scanner.nextLine());
if (line.isEmpty()) {
sb.append("\n");
}
}
if (null != scanner.ioException()) {
out.format("scanner ioe:\n\t%s\n", scanner.ioException().getMessage());
//scanner.ioException().printStackTrace();
}
fosw.write( sb.toString(), 0, sb.length());
fosw.flush();
fosw.close();
scanner.close();
} catch (IOException io) {
io.printStackTrace();
}
}
}
输出:
$ javac ReadReg.java && java ReadReg ; file *
hklm-hw.cat.txt: Big-endian UTF-16 Unicode text, with very long lines
hklm-hw.txt: Little-endian UTF-16 Unicode text, with CRLF, CR line terminators
ReadReg.class: compiled Java class data, version 50.0 (Java 1.6)
ReadReg.java: C source, ASCII text
关于java - 使用扫描仪解析文本文件时,为什么我在每个预期字符之间得到空字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12945238/