无法在Java中使用BufferedReader读取大文件

无法在Java中使用BufferedReader读取大文件,java,Java,我尝试使用BufferedReader读取文件,但当我尝试打印时,它返回了一些奇怪的字符 读取文件的代码为: private static String readJsonFile(String fileName) throws IOException{ BufferedReader br = null; try { StringBuilder sb = new StringBuilder(); br = new Bu

我尝试使用BufferedReader读取文件,但当我尝试打印时,它返回了一些奇怪的字符

读取文件的代码为:

private static String readJsonFile(String fileName) throws IOException{
        BufferedReader br = null;
        try {
            StringBuilder sb = new StringBuilder();
            br = new BufferedReader(new FileReader(fileName));
            String line = br.readLine();
            while(line != null ){
                sb.append(line);
                System.out.println(line);
                line=br.readLine();
            }
            return sb.toString();
        } finally{
            br.close();
        }
    }
此函数被称为:

 String jsonString = null;
    try {
        jsonString = readJsonFile(fileName);
    } catch (IOException e) {
        e.printStackTrace();
    }
但是当我试图在控制台中使用
System.out.println(jsonString)打印时,它正在返回一些精美的图片

注意:当文件大小小于时,它是工作文件


它可以读取的文件大小有任何限制吗?

您正在使用平台默认编码来读取文件,该文件可能是用UTF8编码的。检查文件的实际编码,并指定编码:

BufferedReader r = new BufferedReader(new InputStreamReader(new FileInputStream("...", StandardCharsets.UTF_8));
请注意,由于您只想读取文件中的所有内容,因此可以使用

String json = new String(Files.readAllBytes(...), StandardCharsets.UTF_8);

你说的“一些花哨的照片”是什么意思?文件的编码是什么,平台默认编码是什么?(目前您正在使用
FileReader
,它总是使用平台默认编码…我建议改用
Files.newbuffereder
,它默认为UTF-8,但允许您指定字符集。)我还建议使用try with resources…您的JSON中有二进制数据吗,还是全部是文本?这仍然是无望的模糊-而你还没有回答其余的问题。。。重要的是,编码是什么。@user3697669:什么是“默认值”?对了,这已经开始有所进展了。你说的“一些符号”到底是什么意思?请复制并粘贴到您的问题中,或张贴图片。JSON是否包含任何可能无法在控制台中表示的非ASCII文本?(所有这些都应该在您最初的问题中…)文件的类型是java.nio还是zaaa.com.google.common.io.Files?java.nio。这是所有标准的东西,不需要任何额外的库。