2017-03-29 1 views
0

Ich habe eine Textdatei (253 MB Größe) und ich schreibe diesen Code:Substring mit großer Textdatei in Java

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

    System.out.println(content.substring(19,26)); 

aber ich bekomme diese Fehlermeldung:

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) 

für Teilzeichenfunktion in großen Datei, Was kann ich tun ... bitte helfen Sie mir ...

+1

Starten Sie Java mit erweitertem Heap-Speicher: 'java -Xmx1024M YourClass' oder schreiben Sie Ihr Programm neu, um die Datei in Blöcken zu lesen. –

Antwort

0

Es scheint schrecklich unwirksam, die ganze Datei zu lesen, wenn Sie nur eine 7-Buchstaben-Teilzeichenfolge benötigen. Es hängt wirklich von Ihrer Dateistruktur, aber wenn Sie sicher sind, dass alles, was Sie brauchen, sind Bytes von Positionen 19..26 dann könnte man einfach dieses Bytes mit RandomAccessFile lesen, zum Beispiel:

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 

Natürlich sollten Sie einen richtigen wählen Zeichensatzkodierung beim Erstellen der Zeichenfolge, abhängig von Ihrer Eingabedatei, z new String(b, "UTF-8")