0

これらの状況に対処する方法を提案していただけますか?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) {

        }
    }

}
4

1 に答える 1

1

これがJavaでどのように行われるかは本当に好きではありません。Java7の新しいIOの方が優れていることを願っています。

Javaの使用方法が、他のプログラミング言語/環境とどのように異なるかはわかりません。

  • クライアントがネットワークを介してデータを送信します
  • あなたがそれを読むとき、あなたはそれをローカルファイルに書きます

言語/ツール/環境に関係なく、接続が中断または失われたり、クライアントが停止したり、ディスクが停止したり、その他のエラーが発生したりする可能性があります。I / Oエラーは、すべての環境で発生する可能性があります。

この状況で何ができるかは、状況と発生したエラーに大きく依存します。たとえば、データは、たとえばレコード1000からアップロードを再開するようにユーザーに要求できるような方法で構造化されていますか?ただし、ここですべてに適合する単一のソリューションはありません。

于 2011-07-21T17:01:51.830 に答える