java中带有大文本文件的子字符串

java中带有大文本文件的子字符串,java,substring,large-files,Java,Substring,Large Files,我有一个文本文件(253MB大小),我编写了以下代码: String content = new Scanner(new File ("C:\\Users\\user1\\IdeaProjects\\untitled\\file")).useDelimiter("\\Z").next(); System.out.println(content.substring(19,26)); 但我得到了这个错误: Exception in thread "main" java.lang

我有一个文本文件(253MB大小),我编写了以下代码:

    String content = new Scanner(new File ("C:\\Users\\user1\\IdeaProjects\\untitled\\file")).useDelimiter("\\Z").next();

    System.out.println(content.substring(19,26)); 
但我得到了这个错误:

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space

at java.nio.HeapCharBuffer.<init>(HeapCharBuffer.java:57)
at java.nio.CharBuffer.allocate(CharBuffer.java:335)
at java.util.Scanner.makeSpace(Scanner.java:840)
at java.util.Scanner.readInput(Scanner.java:795)
at java.util.Scanner.next(Scanner.java:1369)
线程“main”java.lang.OutOfMemoryError中的异常:java堆空间 位于java.nio.HeapCharBuffer。(HeapCharBuffer.java:57) 位于java.nio.CharBuffer.allocate(CharBuffer.java:335) 位于java.util.Scanner.makeSpace(Scanner.java:840) 位于java.util.Scanner.readInput(Scanner.java:795) 下一步(Scanner.java:1369) 对于在大文件中使用子字符串函数,我可以做什么。。。
请帮助我……

如果您只需要一个7个字母的子字符串,那么读取整个文件似乎非常无效。这实际上取决于您的文件结构,但如果您确定所需的只是位置
19..26
中的字节,那么您可以使用
RandomAccessFile
读取这些字节,例如:

RandomAccessFile raf = new RandomAccessFile(new File("..."), "r"); // "r" means 'open the file for reading'
raf.seek(19L); // or other position depending on your file structure
byte[] b = new byte[7]; // choose how big the byte-buffer should be - how long is the substring
raf.read(b); // read from file into the buffer
System.out.println(new String(b)); // create a String from the byte-buffer

当然,在创建字符串时,您应该根据输入文件选择适当的字符集编码,例如
新字符串(b,“UTF-8”)

使用增加的堆空间启动Java:
Java-Xmx1024M YourClass
或重写程序以分块读取文件。