Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用BufferedReader和FileReader读取文件_Java_File_Input_Bufferedreader_Filereader - Fatal编程技术网

Java 使用BufferedReader和FileReader读取文件

Java 使用BufferedReader和FileReader读取文件,java,file,input,bufferedreader,filereader,Java,File,Input,Bufferedreader,Filereader,我对java比较陌生,对如何使用缓冲读取器读取文件很好奇。这样做的原因是我参加了一个课程,被指派做一个简单的凯瑟密码,我应该解密一个文本文件,创建一个新文件,并将解密后的文本放入该文件。我可以用扫描仪和一个10KB的小文件来完成这项工作,但是当我使用一个100MB的大文本文件进行测试时,速度非常慢。 这是我的代码,应该用来读取文件内容 public static void main(String[] args) { BufferedReader br = null; FileRe

我对java比较陌生,对如何使用缓冲读取器读取文件很好奇。这样做的原因是我参加了一个课程,被指派做一个简单的凯瑟密码,我应该解密一个文本文件,创建一个新文件,并将解密后的文本放入该文件。我可以用扫描仪和一个10KB的小文件来完成这项工作,但是当我使用一个100MB的大文本文件进行测试时,速度非常慢。 这是我的代码,应该用来读取文件内容

public static void main(String[] args)
{
    BufferedReader br = null;
    FileReader file = null;
    String line = null;
    String all = null;
    try
    {
        file = new FileReader("myfile.txt");
        br = new BufferedReader(file);
        while ((line = br.readLine()) != null) {
            all += line;
        }
    }catch(Exception e)
    {
        System.out.println("nope");
    }
    System.out.println(all);

}
如果有人能给我指出正确的方向,那就太棒了


提前感谢

流式传输,不要将其读入内存。另外,我更喜欢尝试使用资源(因为您需要关闭资源)。例如,您可以随时调整缓冲区大小-

final int size = 1024 * 1024;
try (BufferedReader br = new BufferedReader(new FileReader("myfile.txt"), size)) {
    String line;
    while ((line = br.readLine()) != null) {
        System.out.println(line); // <-- stream it
    }
} catch (Exception e) {
    e.printStackTrace();
}
final int size=1024*1024;
try(BufferedReader br=new BufferedReader(new FileReader(“myfile.txt”),size)){
弦线;
而((line=br.readLine())!=null){

System.out.println(line);//流式传输,不要将其读入内存。此外,我更喜欢尝试使用资源(因为您需要关闭资源)。例如,您可以随时调整缓冲区大小-

final int size = 1024 * 1024;
try (BufferedReader br = new BufferedReader(new FileReader("myfile.txt"), size)) {
    String line;
    while ((line = br.readLine()) != null) {
        System.out.println(line); // <-- stream it
    }
} catch (Exception e) {
    e.printStackTrace();
}
final int size=1024*1024;
try(BufferedReader br=new BufferedReader(new FileReader(“myfile.txt”),size)){
弦线;
而((line=br.readLine())!=null){

Java中的System.out.println(line);//字符串是不可变的,所以每次运行此代码时

all += line;
它创建一个新字符串,并使用StringBuider或StringBuffer将其分配给all

例如

StringBuilder all = new StringBuilder();

希望有帮助!

Java中的字符串是不可变的,所以每次运行此代码时

all += line;
它创建一个新字符串,并使用StringBuider或StringBuffer将其分配给all

例如

StringBuilder all = new StringBuilder();

希望有帮助!

使用StringBuilder而不是字符串来表示
所有
检查这一点,我对java也是新手。但重点是“缓冲区读取器是如何工作的?”…当我们解密您的文件时,硬盘中的内存通过流传递到RAM,然后解密。解密后,我们必须再次发送回硬盘,因为我们必须存储它。因此,为此,我们使用文件读取器,但它工作缓慢,并通过流一个接一个地发送数据。因此,制作了一个缓冲区借助缓冲区读取器,使w传输更快,因为它为要发送的数据创建了缓冲区。要逐行读取文件,请使用
java.util.Scanner.hasnetline()
nextLine
。它不会将所有行读取到内存中。教程使用StringBuilder而不是字符串作为
all
检查此点,我对java也是新手。但重点是“缓冲区读取器是如何工作的?”…当我们解密您的文件时,硬盘中的内存通过流传递到RAM,然后解密。解密后,我们必须再次发送回硬盘,因为我们必须存储它。因此,为此,我们使用文件读取器,但它工作缓慢,并通过流一个接一个地发送数据。因此,制作了一个缓冲区在缓冲区读取器的帮助下,w传输速度更快,因为它为要发送的数据创建了缓冲区。要逐行读取文件,请使用
java.util.Scanner.hasNextLine()
nextLine
。它不会将所有行读取到内存中。教程