在Java中将文件读取到String会导致不可见的字符

时间:2014-01-06 22:36:16

标签: java string file

我无法将文本文件读入Java中的String。我有一个文本文件(在Eclipse中创建,如果这很重要),包含少量文本 - 大约98个字符。通过几种方法将该文件读取到String会导致字符串相当长 - 1621个字符。除了相关的98之外的所有98都在调试器/控制台中不可见。

我尝试了以下方法来加载String:

apache commons-io:

FileUtils.readFileToString(new File(path));

FileUtils.readFileToString(new File(path), "UTF-8");

byte[] b = FileUtils.readFileToByteArray(new File(path);
new String(b, "UTF-8");

byte[] b = FileUtils.readFileToByteArray(new File(path);
Charset.defaultCharset().decode(ByteBuffer.wrap(bytes)).toString();

NIO:

new String(Files.readAllBytes(path);

等等。

有没有办法剥离这些控制字符?有没有办法将文件读取到没有此问题的字符串?


如下面的评论中所述,此行为是由Eclipse生成的损坏的(?)文件引起的。不过,我仍然有兴趣听听从Strings中删除控制字符的任何策略!

2 个答案:

答案 0 :(得分:2)

如果要删除所有不可打印的字符,请尝试使用

str = str.replaceAll("[^\\p{Graph}\n\r\t ]", "");

正则表达式匹配所有“隐形”字符,除了我们要保留的字符;在这种情况下换行字符,制表符和空格。

答案 1 :(得分:0)

逐行读取它到StringBuilder中,然后将其转换为String:

StringBuilder sb = new StringBuilder();
BufferedReader file = new BufferedReader(new FileReader(fileName));
while (true)
{
    String line = file.readLine();
    if (line == null)
        break;
    sb.append(line+"\n");
}
file.close();
return sb.toString();