public static void update(String fileName, String idType, String id, String updatedData[] ) throws Exception{
char fileOutput[];
String wholeData;
String tkn, idtp, idf;
File myFileU = null;
File tempFile = null;
FileReader finU = null;
FileWriter fwU = null;
Scanner frU = null;
try{
finU = new FileReader(myFileU = new File("\\" +fileName + ".txt"));
fileOutput = new char[(int) myFileU.length()];
finU.read(fileOutput);
finU.close();
//System.out.println(myFileU.getCanonicalPath());
tempFile = new File("temp.txt");
tempFile.createNewFile();
fwU = new FileWriter(myFileU, false);
wholeData = new String(fileOutput);
frU = new Scanner(wholeData);
frU.useDelimiter(";");
while(frU.hasNext()){
idtp = frU.next();
idf = frU.next();
if(idtp.equals(idType) && idf.equals(id)){
fwU.write( ";" + idType + ";" + id);
for(int i=0; i< updatedData.length; i++){
fwU.write(";" + updatedData[i]);
}
fwU.write(";" + System.lineSeparator());
frU.nextLine();
}
if(!idf.equals(id))
fwU.write(";" + idtp + ";" + idf);
tkn = frU.nextLine();
fwU.write(tkn);
fwU.write(System.lineSeparator());
if(idf.equals(autoSerial(fileName, idType)))
break;
}
fwU.flush();
fwU.close();
}
catch(IOException e){
System.out.println("error in opening the file U " + e);
}
finally{
}
}
上述方法旨在覆盖正在读取的文件。它应该做的是从文件中读取,用更新的数据替换用户指定的记录,并用更新的数据覆盖文件,但它不会覆盖文件,而是在文件的末尾附加更新的记录,给出(虽然如果我将数据保存到单独的文件中,它会正确地保存更新的数据):
java.io.FileNotFoundException: \Schedules.txt (The system cannot find the file specified)
虽然文件在那里并且它也从中读取了数据?任何线索?我是Java的新手!
答案 0 :(得分:1)
您的问题显然是使用Java打开文件。您似乎对文件路径感到困惑。以下是如何使用不同位置等打开文件的示例。
我们假设您的文件名为abc.txt
,并且位于C:\
目录下的test_stackoverflow
驱动器中,那么您的路径将如下所示:
FileReader reader = new FileReader(new File("C:\\test_stackoverflow\\abc.txt"));
注意双斜线,即跳过斜线的方式。
如果您的文件与java类位于同一目录中,则路径如下所示,没有任何斜杠
FileReader reader = new FileReader(new File("test.txt"));
假设你想要阅读的文件是上面的一个文件夹(src),那么你的java类就是
FileReader reader = new FileReader(new File("src\\test.txt"));
如果您使用的是OSX,那么您可以执行以下操作
FileReader reader = new FileReader(new File("/Users/Raf/Desktop/abc.txt"));