我是初學Java的人。從文件讀取並寫入到java文件中
這是我的方法:
我想讀的兩個文件,然後讓他們的工會。我應該是使用數組大小爲100(只有一個array
允許的,由線或不允許arrayList
或其他結構讀取和寫入線)。
首先,我從file1
讀取所有的記錄,並將其寫入輸出,第三個文件。爲此,我一次讀取100條記錄,並使用迭代將它們寫入第三個文件。
然後,像第一個文件一樣,這次我將第二個文件作爲100條記錄一次讀取,並將它們寫入memory[]
。然後我找到常用記錄,如果我從File2讀取的記錄不在File1中,則將其寫入輸出文件。我這樣做直到reader2.readLine()
得到null
,我在每次迭代中重新打開file1
。
這是我迄今爲止所做的工作,差不多完成了。任何幫助,將不勝感激。
編輯:好的,現在它沒有給出任何異常,但它找不到不同的記錄,並且不能寫入它們。我猜最後的循環和布爾運算符不起作用,爲什麼?我真的需要幫助。謝謝你的耐心。
import java.io.*;
public class FileUnion
{
private static long startTime, endTime;
public static void main(String[] args) throws IOException
{
System.out.println("PROCESSING...");
reset();
startTimer();
String[] memory = new String[100];
int memorySize = memory.length;
File file1 = new File("stdlist1.txt");
BufferedReader reader1 = new BufferedReader(new FileReader(file1));
File file3 = new File("union.txt");
BufferedWriter writer = new BufferedWriter(new FileWriter(file3));
int numberOfLinesFile1 = 0;
String line1 = null;
String line11 = null;
while((line1 = reader1.readLine()) != null)
{
for (int i = 0; i < memorySize;)
{
memory[i] = line1;
i++;
if(i < memorySize)
{
line1 = reader1.readLine();
}
}
for (int i = 0; i < memorySize; i++)
{
writer.write(memory[i]);
writer.newLine();
numberOfLinesFile1++;
}
}
reader1.close();
File file2 = new File("stdlist2.txt");
BufferedReader reader2 = new BufferedReader(new FileReader(file2));
String line2 = null;
while((line2 = reader2.readLine()) != null)
{
for (int i = 0; i < memorySize;)
{
memory[i] = line2;
i++;
if(i < memorySize)
{
line2 = reader2.readLine();
}
}
for (int k = 0; k < memorySize; k++)
{
boolean found = false;
File f1 = new File("stdlist1.txt");
BufferedReader buff1 = new BufferedReader(new FileReader(f1));
for (int m = 0; m < numberOfLinesFile1; m++)
{
line11 = buff1.readLine();
if (line11.equals(memory[k]) && found == false);
{
found = true;
}
}
buff1.close();
if (found == false)
{
writer.write(memory[k]);
writer.newLine();
}
}
}
reader2.close();
writer.close();
endTimer();
long time = duration();
System.out.println("PROCESS COMPLETED SUCCESSFULLY");
System.out.println("Duration: " + time + " ms");
}
public static void startTimer()
{
startTime = System.currentTimeMillis();
}
public static void endTimer()
{
endTime = System.currentTimeMillis();
}
public static long duration()
{
return endTime - startTime;
}
public static void reset()
{
startTime = 0;
endTime = 0;
}
}
如果'stdlist1.txt'長度小於100行,代碼會發生什麼?如果它不完全是100行的倍數,會發生什麼?你可以使用'ArrayList'而不是'String []'作爲'memory'嗎?它會使事情比使用固定大小的數組容易得多。 –
msandiford
+1分享你的努力! – SpeedBirdNine
這是我的作業項目,它確保沒有少於100行的輸入文件。而且,如果它不是100行的倍數,則memory []將填充一些空值。但我認爲這不會是一個問題。 – beetle