Java使用额外的空格和CRLF读取文本文件

时间:2012-05-25 17:39:00

标签: java parsing powershell io

我有一个由PowerShell使用命令

生成的文本文件

GetChild-Item C:\Source\Path | ForEach-Object { $_.Name } > "C:\MyPlace\outfile.txt"

这会生成outfile.txt,就像这个Notepad ++一样打开 Notepad++

但是当用Java打开并逐行读取时:

while((line = br.readLine()) != null) {
    line = line.replaceAll("\\s", "");
    System.out.println(i + ":\t" + line);
}

它产生了这个:

Java output

这完全是我的处理。我试过替换空白字符,但它似乎没有做到这一点。有什么想法吗?

2 个答案:

答案 0 :(得分:4)

>Out-File的语法糖,带有一些预定义的参数设置。其中之一是编码。默认情况下,Out-File将以little endian unicode创建一个文件。因此,要使用ASCII编码生成文件,您可以执行以下操作:

GetChild-Item C:\Source\Path | ForEach-Object { $_.Name } | 
    Out-File "C:\MyPlace\outfile.txt" -Encoding ASCII

...或者您可以使用默认输出ASCII的Add-Content

GetChild-Item C:\Source\Path | ForEach-Object { $_.Name } | 
    Add-Content "C:\MyPlace\outfile.txt"

答案 1 :(得分:3)

问题似乎是Powershell正在发出一个带有unicode编码的文件,但Java正在将它作为普通的旧ASCII读取。您需要更改java代码以将文件读取为unicode。