私はJavaで初心者です。ファイルから読み込み、Javaのファイルに書き込む
これは私のアプローチです:
私は2つのファイルを読み、それらの組合を取得しようとしています。私はfile1
からすべてのレコードを読み、
まず(。、ちょうど1 array
許可arrayList
または他の構造が許可されていないか、行ずつ読み書き)サイズ100と配列を使用していますし、それらを書き込む必要があります出力、3番目のファイル。そのためには、一度に100レコードを読み込み、繰り返しを使用して3つ目のファイルに書き込みます。
その後、最初のファイルと同様に、今回は2回目のファイルを一度に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行の倍数でない場合はどうなりますか? 'memory'に' String [] 'の代わりに' ArrayList 'を使用できますか?固定サイズの配列を使用するよりもかなり簡単になります。 –
msandiford
+1あなたの努力を分かち合うために! – SpeedBirdNine
これは私の宿題プロジェクトです。100行未満の入力ファイルを保証しません。また、100行の倍数でなければ、memory []はいくつかのヌル値で埋められます。しかし、私はそれが問題ではないと思う。 – beetle