Я пытаюсь написать функцию в Java, который возвращает следующую восходящего последовательности (запуск) из текстового файла, скажем, типа возвращаемого значения функции будет ArrayList.Получить следующий запуск из текстового файла
Мой пример файла input.txt содержит следующие значения: 78123421. Так что в терминах прогонов это означает, что файл имеет 4 пробега: | 78 | 1234 | 2 | 1 |.
Что я пытаюсь достичь здесь, как, когда я назвал бы эту функцию из основных() четыре раза он должен напечатать что-то вроде
1.run: 78,
2.run: 1234,
3.run: 2,
4.run: 1
или только два вызова должны напечатать
1.run: 78,
2.run: 1234
Я попытался решить свою проблему, используя BufferedReader/FileReader и RandomAccessFile, но пока не нашел рабочего решения, пожалуйста, помогите:/
Так вот что я до сих пор. Основная идея состояла в том, чтобы использовать RandomAccessFile и читать с ввода, пока условие выполнения выполнено. Но читатель читает одно значение больше, поэтому я использую seek(), чтобы начать чтение в правильной позиции, когда происходит следующий вызов функции. В коде должна быть ошибка, потому что она не печатает все прогоны или просто срабатывает Исключение.
import java.io.File;
import java.util.ArrayList;
import java.io.RandomAccessFile;
public class GetRunsFromFile
{
static long start = 0;
static long read_len = 0;
public static void main(String[] args) throws Exception
{
File in = new File("C:/Users/henrich/Desktop/Gimp.txt");
RandomAccessFile raf = new RandomAccessFile(in,"r");
ArrayList<Integer> current_run = new ArrayList<Integer>();
for(int i=1;i<=4;i++)
{
current_run = getNextRun(raf);
printArrayList(current_run);
}
raf.close();
}
private static ArrayList<Integer> getNextRun(RandomAccessFile raf) throws Exception
{
int v;
String line;
int val = Integer.MIN_VALUE;
ArrayList<Integer> run = new ArrayList<Integer>();
while((line=raf.readLine())!= null)
{
v = Integer.parseInt(line.trim());
if(v >= val)
{
read_len = raf.getFilePointer() - start;
start = raf.getFilePointer();
run.add(v);
val = v;
}
else
{
raf.seek(raf.getFilePointer() - read_len);
start = raf.getFilePointer();
return run;
}
}
return null;
}
private static void printArrayList(ArrayList<Integer> al)
{
for(int i=0; i<al.size(); i++)
{
System.out.print(al.get(i) + " ");
}
System.out.println();
System.out.println("------");
}
}
Для получения дополнительных вопросов, пожалуйста, дайте мне знать.
Примечание: оно должно работать только для восходящих прогонов и файлов любой длины.
Спасибо за поддержку.
Было бы лучше показать код, который у вас есть, чтобы попытаться определить, почему возникают сбои. – Makoto