我有這樣一種方法,它將讀取文本文件並寫入臨時文本文件(用於重寫),然後刪除舊文件。該函數讀取並排序然後重寫。如何在java中排序文件
我有這樣的方法:
public void sortFile()
{
String line; int count = 0; int min;
int j=0;
try
{
BufferedReader asd = new BufferedReader(new FileReader(list));
while((line=asd.readLine()) != null)
{
count++; //count how many lines
}
Object temp,temp1,temp2,temp3;
String names[] = new String[count];
Double timeInd[] = new Double[count];
String scores[] = new String[count];
String difficulty[] = new String[count];
while((line=asd.readLine()) != null)
{
String var[] = line.split("-");
names[j] = var[0];
timeInd[j]=Double.parseDouble(var[1]);
scores[j] = var[2];
difficulty[j] = var[3];
j++;
}
asd.close();
if(count!=1)
{
for(int i=0; i<count; i++) //Selection sort
{
min=i;
for(int a=1; a<count ; a++)
{
if(timeInd[a]<timeInd[min]) min=a;
}
//swap values;
temp=names[i];
temp1=timeInd[i];
temp2=scores[i];
temp3=difficulty[i];
////////
names[i] = names[min];
timeInd[i]= timeInd[min];
scores[i] = scores[min];
difficulty[i] = difficulty[min];
/////////
names[min] = (String) temp;
timeInd[min] = (Double) temp1;
scores[min] = (String) temp2;
difficulty[min] = (String) temp3;
}
}
//rewrite the new sorted values;
PrintWriter write = new PrintWriter(new FileWriter(tempo,true));
for(int i=0;i<count;i++)
{
write.println(names[i]+"-"+timeInd[i]+"-"+scores[i]+"-"+difficulty[i]);
}
write.close();
list.delete();
tempo.renameTo(list);
}catch(Exception e){};
}
我的文本文件具有內容:
myName-12.999-100-Easy
我把它們分成4正如你可以在我的代碼檢查上方。第一個是名字,第二個是時間,第三個是得分,第四個是難度。現在我的問題是,我想按升序排列我的文件,我的基礎是這個排序的時間。誰擁有最快的時間將會成爲頂級球員。順便說一下,我使用了選擇排序。然而。如果我的文本文件只有一行值。像上面的例子內容:
myName-12.999-100-Easy
新重寫文本文件將擁有:
null-null-null-null
即使我與我的 如果(!計數= 1)
但如果被困它我有這樣的多個記錄:
hisName-14.542-100-Easy
herName-1.432-100-Easy
它不會產生null null null null,但我t會產生相同的結果。它還沒有排序。爲什麼?我不知道這背後的邏輯問題是什麼。我希望你能幫助我。乾杯。
哇。我會試試這個。謝謝 – Roch 2014-09-06 17:02:59
我正在計算多少行,以便我可以給以下數組固定的值。如果BufferedReader不是那麼可取。我可以使用掃描儀閱讀嗎? – Roch 2014-09-06 17:07:45
編號爲什麼要一次讀取文件兩次。仔細閱讀,BufferedReader reset()不是最好的。您應該使用緩衝讀取器來讀取字符流,但要高效地進行。這是我的觀點。 – BatScream 2014-09-06 17:13:07