これらの状況に対処する方法を提案していただけますか?2番目の例では、UNIXで発生することは非常にまれですよね。アクセス権に問題がない場合。また、ファイルは作成されません。IOExceptionが作成されているかどうかにかかわらず、なぜそこにあるのかわかりません。なぜIOExceptionを気にする必要があるのでしょうか。
ただし、最初の例では、ゾンビファイルが破損しています。ここで、ユーザーに再度アップロードするように指示すると、同じことが起こる可能性があります。それができず、inputstreamにマーカーがない場合。あなたはあなたのデータを失いますか?これがJavaでどのように行われるかは本当に好きではありません。Java7の新しい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) {
}
}
}