나는 초보자입니다. 나는 두 개의 파일을 읽은 다음 그 (것)들의 조합을 얻기 위해 노력하고파일에서 읽기 및 자바 파일에 쓰기
:
이
내 접근 방식입니다. 나는file1
에서 모든 레코드를 읽어
먼저 (., 한 array
허용 arrayList
또는 다른 구조가 허용되지 않습니다 또는 라인으로 라인을 읽기, 쓰기)의 크기 (100)와 배열을 사용하고, 그리고에 기록한다 출력, 세 번째 파일. 이를 위해 한 번에 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 줄의 배수가 아니라면 어떻게 될까요? 'memory'에'String []'대신'ArrayList'을 사용할 수 있습니까? 고정 크기 배열을 사용하는 것보다 훨씬 쉬운 방법입니다. –
msandiford
+1 노력을 공유하십시오! – SpeedBirdNine
이것은 숙제 프로젝트로, 100 줄 미만의 입력 파일을 보장하지 않습니다. 또한 100 줄의 배수가 아닌 경우 memory []는 일부 null 값으로 채워집니다. 그러나 나는 그것이 문제가되지 않을 것이라고 생각한다. – beetle