您能否建议如何处理这些情况?据我所知,在第二个例子中,它很少会发生在unix上,是吗?如果访问权限没问题。此外,甚至不会创建该文件。我不明白为什么IOException存在,无论是否创建,为什么我们都要烦扰IOException?
但是在第一个例子中,会有一个损坏的僵尸文件。现在,如果您告诉用户再次上传它,可能会发生同样的事情。如果你不能这样做,输入流没有标记。你丢失了数据?我真的不喜欢在Java中如何做到这一点,我希望Java 7中的新IO更好
通常删除它
public void inputStreamToFile(InputStream in, File file) throws SystemException {
OutputStream out;
try {
out = new FileOutputStream(file);
} catch (FileNotFoundException e) {
throw new SystemException("Temporary file created : " + file.getAbsolutePath() + " but not found to be populated", e);
}
boolean fileCorrupted = false;
int read = 0;
byte[] bytes = new byte[1024];
try {
while ((read = in.read(bytes)) != -1) {
out.write(bytes, 0, read);
}
} catch (IOException e) {
fileCorrupted = true;
logger.fatal("IO went wrong for file : " + file.getAbsolutePath(), e);
} finally {
IOUtils.closeQuietly(in);
IOUtils.closeQuietly(out);
if(fileCorrupted) {
???
}
}
}
public File createTempFile(String fileId, String ext, String root) throws SystemException {
String fileName = fileId + "." + ext;
File dir = new File(root);
if (!dir.exists()) {
if (!dir.mkdirs())
throw new SystemException("Directory " + dir.getAbsolutePath() + " already exists most probably");
}
File file = new File(dir, fileName);
boolean fileCreated = false;
boolean fileCorrupted = false;
try {
fileCreated = file.createNewFile();
} catch (IOException e) {
fileCorrupted = true;
logger.error("Temp file " + file.getAbsolutePath() + " creation fail", e);
} finally {
if (fileCreated)
return file;
else if (!fileCreated && !fileCorrupted)
throw new SystemException("File " + file.getAbsolutePath() + " already exists most probably");
else if (!fileCreated && fileCorrupted) {
}
}
}
答案 0 :(得分:1)
我真的不喜欢在Java中如何做到这一点,我希望Java 7中的新IO更好
我不确定Java在使用方式上与其他任何编程语言/环境的区别如何:
无论语言/工具/环境如何,连接都可能被中断或丢失,客户端可能会消失,磁盘会死亡,或者发生任何其他错误。任何和所有环境都可能出现I / O错误。
在这种情况下你可以做的很大程度上取决于情况和发生的错误。例如,数据是否以某种方式构成,您可以要求用户从记录1000继续上传,例如?但是,没有一种解决方案适合所有人。