我写了一些文本然后将其删除,但删除失败。
代码非常简单:
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
public class TestFile {
public static void main(String[] args) throws IOException {
File file = new File("c:\\abc.txt");
writeFile(file, "hello");
// delete the file
boolean deleted = file.delete();
System.out.println("Deleted? " + deleted);
}
public static void writeFile(File file, String content) throws IOException {
OutputStream out = null;
try {
out = new FileOutputStream(file);
out.write(content.getBytes("UTF-8"));
} catch (IOException e) {
try {
out.close();
} catch (IOException e1) {
// ignored
}
}
}
}
输出结果为:
Deleted? false
abc.txt
下还有一个文件hello
包含c:
。
然后我使用FileUtils.writeStringToFile(...)
中的commons-io.jar
代替,该文件将被删除。
但我不知道我的代码出了什么问题,请帮我找出来。
答案 0 :(得分:4)
如果收到IOException,则只关闭文件。
将其更改为finally
块,您就可以关闭并删除该文件了。
public static void writeFile(File file, String content) throws IOException {
OutputStream out = new FileOutputStream(file);
try {
out.write(content.getBytes("UTF-8"));
} finally {
try {
out.close();
} catch (IOException ignored) {
}
}
}
答案 1 :(得分:1)
完成文件编写后,您需要关闭OutputStream。
try {
out = new FileOutputStream(file);
out.write(content.getBytes("UTF-8"));
out.close();
} catch (IOException e) {
try {
out.close();
} catch (IOException e1) {
// ignored
}
}
答案 2 :(得分:1)
如果发生异常,您只需删除文件即可。打开文件后,每次都需要这样做。 你可能想要接近最后一个块。
如果您使用的是Java 7,我会考虑使用try-with-ressources块,它会为您关闭文件。
try (BufferedReader br = new BufferedReader(new FileReader(path)))
{
return br.readLine();
}
答案 3 :(得分:1)
在您的主要方法中,
public static void main(String[] args) throws IOException {
File file = new File("c:\\abc.txt");
writeFile(file, "hello");
// delete the file
boolean deleted = file.delete();
System.out.println("Deleted? " + deleted);
}
您打开文件,写入文件然后不要关闭它。 Java会为您保留文件,因此如果您想为其添加更多信息,可以。但是,为了能够删除该文件,您需要确保没有其他引用打开。您可以使用file.close()来关闭文件句柄Java保留。
最好在完成后关闭流,尤其是在向其中添加数据时。否则,您可能会遇到意外打开保留文件的情况,或者在极端情况下,丢失您认为已保存的数据。
答案 4 :(得分:1)
看看你没有FileUtils.writeStringToFile()
做什么。
public static void writeStringToFile(File file, String data, String encoding) throws IOException {
OutputStream out = new java.io.FileOutputStream(file);
try {
out.write(data.getBytes(encoding));
} finally {
IOUtils.closeQuietly(out);
}
}
您会注意到out
流总是关闭,在您的示例中,如果catch
抛出write()
块,它只会在{{1}}块中关闭异常。
在Windows上,无法删除任何程序打开的文件。