我試圖用Java編寫一個函數,返回從一個txt文件的下一個上升序列(運行)獲取下運行,比方說,一個函數的返回值類型是的ArrayList。從文本文件
我的示例文件input.txt包含下一個值:78123421.所以就運行而言,這意味着文件有4次運行:| 78 | 1234 | 2 | 1 |。
什麼我想在這裏達成就像是當我稱之爲從main()的四倍這種功能,它應該打印像
1.run: 78,
2.run: 1234,
3.run: 2,
4.run: 1
或只是兩個電話應打印
1.run: 78,
2.run: 1234
我試圖解決我的問題使用BufferedReader/FileReader和RandomAccessFile,但目前爲止沒有工作解決方案,請幫助:/
所以這就是我到目前爲止。主要思想是使用RandomAccessFile並從輸入讀取,只要運行條件滿足。但讀者更多地讀取一個值,這就是爲什麼當下一個函數調用發生時,我使用seek()開始讀取正確位置的原因。代碼中必須存在一個錯誤,因爲它不會打印所有的運行或者只是一個Exception引發。
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