Здравствуйте, у меня есть проблема с файлом чтения.Прочтите BIG txt-файл с помощью метода JAVA
У меня есть BIG .txt файл (500MB)
И я хочу прочитать строку с методом я начинаю метод medhor rsault это первая линия. Я начинаю метод второй и возвращаю вторую строку
У меня этот код. Я сохраняю последнюю строку чтения и читаю строку + 1, но программа останавливается в каждой строке < последней прочитанной строки. и если я прочитаю 100 000 строк <, это слишком долго.
public static Boolean Jedno(){
int poradievtahu=0;
int[] tah=new int[7];
String subor= "C:/Users/Paradox/workspace/Citaj_po_Riadku/all6.txt";
Scanner sc;
try {
sc = new Scanner(new File(subor));
int lineIndex = 0;
cit: while(sc.hasNextLine()) {
String line = sc.nextLine();
if(lineIndex++ >= pocetC+1) {
System.out.print("Zvacsujem "+ (pocetC+1) + " " + line);
// do something
poradievtahu=-1;
Scanner scanner=new Scanner(line);
while(scanner.hasNextInt()){
int pom= scanner.nextInt();
tah[++poradievtahu]=pom;
if (poradievtahu==5){
poradievtahu=-1;
pocetC++;
if ((pocetC%(55935)==0)&&(pocetC!=0)){
Calendar cal = Calendar.getInstance();
PrintWriter writer4 = new PrintWriter(new BufferedWriter(new FileWriter("nove.txt", true)));
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
writer4.println("Ďalšia 1/1470 in " + sdf.format(cal.getTime()));
writer4.println(Arrays.toString(tah));
writer4.close();
}
if (pocetC>=13983816){
//berem=false;
PrintWriter writer4 = new PrintWriter(new BufferedWriter(new FileWriter("mozne.txt", true)));
Calendar cal = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
writer4.println("End file in " + sdf.format(cal.getTime()));
writer4.close();
return true;
}
Pocty.hladam=tah;
}
}
break cit;
}
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return false;
}
Пожалуйста, у вас есть какие-то способы решения проблемы? НО, если я установил линию 500 000, это более 1 с. но файл имеет 19 000 000 строк.
и как получить StartLine в строку? – user7575308
Как вы можете видеть переменную _lines_ является тип данных Stream, поэтому вы можете циклически перебирать поток, используя lambda (Java8). 'lines.forEach (l -> { // здесь идет ваша логика для обработки каждой строки ... });' } ** l ** - начальная линия, и она уже находится в цикле –
@ user7575308 Обновлен ответ , надеюсь, теперь это становится яснее. –