我必須創建一個程序,從兩個已按字母順序排列的文件中讀取名稱和ID號,並將它們按第三個文件按字母順序組合。姓氏,名字 ID(前。rbb091020) 姓氏,名字 ID爲什麼我的程序不能將信息寫入文件?
出於某種原因,我的文件中讀取兩個文件,並創建一個第三,但它不寫什麼到第三個文件。
這裏是我的代碼...
import java.io.*;
import java.util.Scanner;
public class Combine_Files
{
public static void main(String[]args) throws IOException
{
String filename1 = "";
String filename2 = "";
String combinedFileName = "";
String response = "";
String nextName1 = "";
String nextName2 = "";
String nextIDNumber1 = "";
String nextIDNumber2 = "";
boolean okToOverwrite = false;
Scanner keyboard = new Scanner(System.in);
System.out.println("What is the name of the first file?");
filename1 = keyboard.nextLine();
File file1 = new File(filename1);
if (!file1.exists())
{
System.out.println(file1 + " does not exist.\nTerminating Program.");
System.exit(0);
}
System.out.println("What is the name of the second file?");
filename2 = keyboard.nextLine();
File file2 = new File (filename2);
if (!file2.exists())
{
System.out.println(file2 + " does not exist.\nTerminating Program.");
System.exit(0);
}
System.out.println("What is the name of the file that you wish to create?");
combinedFileName = keyboard.nextLine();
File combinedFile = new File (combinedFileName);
while (combinedFile.exists() && !okToOverwrite)
{
System.out.println("\nError, a file named " +
combinedFileName + " already exists." +
"\nWould you like to overwrite this file?" +
"\nEnter Y for Yes or N for No.");
response = keyboard.nextLine();
// Add input validation on response
if (response.equalsIgnoreCase("Y"))
{
okToOverwrite = true;
}
else
{
System.out.println("Enter a new filename.");
combinedFileName = keyboard.nextLine();
combinedFile = new File(combinedFileName);
}
}
if (file1.exists() && file2.exists())
{
Scanner list1 = new Scanner(file1);
Scanner list2 = new Scanner(file2);
PrintWriter outputFile = new PrintWriter(combinedFile);
while (list1.hasNext() && list2.hasNext())
{
nextName1 = list1.nextLine();
nextName2 = list2.nextLine();
if(nextName1.compareToIgnoreCase(nextName2) <0)
{
outputFile.print(nextName1);
nextName1 = list1.nextLine();
outputFile.print(nextName1);
}
else if(nextName1.compareToIgnoreCase(nextName2) >0)
{
outputFile.println(nextName2);
nextName2 = list2.nextLine();
outputFile.println(nextName2);
}
else
{
outputFile.println(nextName1);
nextName1 = list1.nextLine();
outputFile.println(nextName1);
outputFile.println(nextName2);
nextName2 = list2.nextLine();
outputFile.println(nextName2);
}
}
while (list1.hasNext() && !list2.hasNext())
{
outputFile.println(nextName1);
}
while (list2.hasNext() && !list1.hasNext())
{
outputFile.println(nextName2);
}
}
}
}
或簡單地使用'autoFlush'來調用構造函數'PrintWriter(OutputStream out,boolean autoFlush)' – 2012-04-07 17:19:49
沖洗問題是我第一個懷疑,但即使如此,文件應該在關閉句柄並且VM退出時被刷新。這個程序還有其他問題。 – aaron 2012-04-07 17:23:05
@ Eng.Fouad根據文檔,autoflush選項僅適用於'println','printf'和'format'。海報使用'print()'與'println'混合使用,所以我選擇了手動調用'flush()' – 2012-04-07 17:23:08