Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.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_Java_Text_7zip - Fatal编程技术网

如何读取大型文本文件-java

如何读取大型文本文件-java,java,text,7zip,Java,Text,7zip,我正在制作一个游戏,但要安装它,它需要7zip来解压文件,所以我附带了7zip安装程序。我已经创建了一个JFrame,里面有一个JTextArea来输入,但是我不能让BufferedReader读取整个txt文件(它有57行,我想这主要是因为BufferedReader不是设计用来读取那么多行的。)你能帮我读取文件吗,这样我就可以将许可证添加到游戏中。 谢谢 杰克逊 编辑 当你们付钱给一个不懂东西的新手时,我感到很受欢迎--只要从文件中读完整的文本就行了。将它存储到一个字符串变量中,然后将该值放

我正在制作一个游戏,但要安装它,它需要7zip来解压文件,所以我附带了7zip安装程序。我已经创建了一个JFrame,里面有一个JTextArea来输入,但是我不能让BufferedReader读取整个txt文件(它有57行,我想这主要是因为BufferedReader不是设计用来读取那么多行的。)你能帮我读取文件吗,这样我就可以将许可证添加到游戏中。 谢谢 杰克逊

编辑
当你们付钱给一个不懂东西的新手时,我感到很受欢迎--

只要从文件中读完整的文本就行了。将它存储到一个
字符串
变量中,然后将该值放入
JTextArea
,因为在JVM内存中存储57行并没有那么大。

我最近编写了一个程序,使用BufferedReader从gzip文件中读取11亿行

读取整个文件的最简单方法是使用

String text = FileUtils.readFileToString(new File("uncompressedfile.txt"));

或者如果使用gzip压缩(与7zip类似)


您可以通过两种方式完成:-

1> 使用扫描仪

void read() throws IOException {
    StringBuilder text = new StringBuilder();
    String NL = System.getProperty("line.separator");
    Scanner scanner = new Scanner(new FileInputStream(fFileName), fEncoding);
    try {
      while (scanner.hasNextLine()){
        text.append(scanner.nextLine() + NL);
      }
    }
    finally{
      scanner.close();
    }
    log("Text read in: " + text);
  }
2> 缓冲阅读器

static public String getContents(File aFile) {

    StringBuilder contents = new StringBuilder();

    try {

      BufferedReader input =  new BufferedReader(new FileReader(aFile));
      try {

        while (( line = input.readLine()) != null){
          contents.append(line);
          contents.append(System.getProperty("line.separator"));
        }
      }
      finally {
        input.close();
      }
    }
    catch (IOException ex){
      ex.printStackTrace();
    }

    return contents.toString();
  }

57行并不是那么大,bufferedreader已经被用来读取gb中的文件:)

什么是“无法获取
bufferedreader
读取”呢?从什么时候起,57行是一个“大文本文件”?我使用了
BufferedReader
阅读了数百万行。你声称它不是为阅读57而设计的,事实上是没有根据的。@EJP我能找到的唯一教程只教我如何阅读一行,而不是57试试这个:@Black_Sirrah239无关紧要。读57行,或者说一百万行,和读一行是一样的。有循环。如果代码合适,您甚至可以复制bufferedReader.readLine()57次,或者100万次。我从哪里导入FileUtils?这是Apache Common IO的一部分,谢谢。我下载了它,除了现在我得到了这个异常:java.nio.charset.UnsupportedCharsetException:7zip_license.txt你可以提供一个或两个参数。如果您提供两个参数,那么第二个参数必须是字符集(正如javadoc中所述),最简单的选项是只提供文件名(如上面的示例所示)。顺便说一句,指定像“UTF-8”这样的字符集被认为是最佳实践,但我会首先处理简单的大小写。我目前有'String ZipLicenseData=FileUtils.readFileToString(“7zip_license.txt”);'我无法解释为什么它不起作用
void read() throws IOException {
    StringBuilder text = new StringBuilder();
    String NL = System.getProperty("line.separator");
    Scanner scanner = new Scanner(new FileInputStream(fFileName), fEncoding);
    try {
      while (scanner.hasNextLine()){
        text.append(scanner.nextLine() + NL);
      }
    }
    finally{
      scanner.close();
    }
    log("Text read in: " + text);
  }
static public String getContents(File aFile) {

    StringBuilder contents = new StringBuilder();

    try {

      BufferedReader input =  new BufferedReader(new FileReader(aFile));
      try {

        while (( line = input.readLine()) != null){
          contents.append(line);
          contents.append(System.getProperty("line.separator"));
        }
      }
      finally {
        input.close();
      }
    }
    catch (IOException ex){
      ex.printStackTrace();
    }

    return contents.toString();
  }