从Java中读取文件中的行

时间:2014-06-13 00:24:28

标签: java bufferedreader

我有一个文本文件,每行包含一个字符串,并且每个字符串已经为Java格式化,这意味着所有内容都已经转义。我尝试使用BufferedReader,但是它会转义字符串中的每个反斜杠,使得字符串看起来不应该如此(例如" \" hello \""将结果为" \\"你好\\&#34)。反正有没有避免这个?

3 个答案:

答案 0 :(得分:2)

您无需转义文件本身的内容。这只适用于在Java代码中键入String文字的情况。当直接从文件中读取时,文件的内容将按字面解释。

换句话说,如果你的文件说:

"hi"

将其读入字符串,然后System.out.println将其打印出来

"hi"

如果您遇到不可打印字符的问题,这可能与编码问题有关(您必须更具体并举例说明)。我总觉得这篇文章具有启发性:http://www.joelonsoftware.com/articles/Unicode.html

要使用特定编码读取文件,请使用InputStreamReader设置编码。

但看起来你正在阅读源代码,其中一部分有一个你想要解释的字符串。对于该特定字符串,您可以将其传递给StringEscapeUtils.html#unescapeJava

答案 1 :(得分:0)

您可以尝试beanshell

例如,假设您有一个像这样的文件

  

\ “XYZ \”

然后

import java.io.BufferedReader;
import java.io.InputStreamReader;

import bsh.Interpreter;


public class ReadFile {

    public static void main(String[] args) throws Exception{

        Interpreter i = new Interpreter();  // Construct an interpreter

        BufferedReader br = new BufferedReader(new InputStreamReader(ReadFile.class.getResourceAsStream("file.txt")));
        String line = null;
        while((line = br.readLine())!=null){
//          System.out.println(line);
            i.eval("foo = \""+line+"\"");
            String foo = (String)i.get("foo");
            System.out.println(foo);
        }
        br.close();

    }

}

你会得到

  

“XYZ”

(而不是\“xyz \”)

答案 2 :(得分:0)

  

我尝试使用BufferedReader,但它会转义字符串中的每个反斜杠,使字符串看起来不应该如此(例如" \" hello \""会结果为" \"你好\")。

不,它没有。你错了。