0

このコードを機能させようとしています。これは、1 つのファイルをコピーし、選択した名前で同じディレクトリに貼り付ける基本的な I/O システムです。単純なはずですが、何らかの理由でプログラムが実行され、2 番目のファイルが作成されますが、スタックします。Java プロセスの CPU は約 5% にとどまり、ファイルは決して完了しません。一部のデータのみをコピーするだけで、どこかで無限ループに陥っていると思います。

私はすでに自分のコードをOracle Web サイトの Byte Streams チュートリアルと比較しました。

追加: 読み取っているものを出力するように依頼したところ、 value を読み取っている無限ループでスタックしています255。それが役立つ場合。また、Oracle Web サイトから直接コードをコンパイルしましたが、同じことを行います。

私が言えることから、それは一貫しているように見えます。誰が私が間違っているのか教えてもらえますか? ありがとうございました。

(PS: 私は Eclipse 4.2.0 を使用しています)。

これは、ファイルをコピーするために私がやっていることです:

package fileIO;

import java.io.*;

import system.Debug;

public class fileUtil {

    public static void copyFileTo(String file2Copy, String file2Paste) {
        FileInputStream fin = null;
        FileOutputStream fout = null;

        try {
            fin = new FileInputStream(file2Copy);
            fout = new FileOutputStream(file2Paste);

            int aByte;
            while ((aByte = fin.read()) != -1) {
                fout.write(aByte);
            }
        } catch (FileNotFoundException e) {
            Debug.out("Error: File Not Found: " + file2Copy);
        } catch (IOException e) {
            Debug.out("Error: File IO Exception Copying: " + file2Copy);
        } catch (Exception e) {
            Debug.out("Error: General Exception Closing Streams:" + file2Copy);
        } finally {
            try {
                fin.close();
                fout.close();
            } catch (IOException e) {
                Debug.out("Error: File IO Exception Closing Streams: " + file2Copy);
            } catch (Exception e) {
                Debug.out("Error: General Exception Closing Streams:" + file2Copy);
            }
        }
    }
}

私のプログラムのメインクラスでは、これを実行します:

fileUtil.copyFileTo("google.bmp", "google(1).bmp");
4

3 に答える 3

1

fout.flush()OutputStreamを閉じる前に実行してみてください。

于 2013-03-21T11:50:01.510 に答える
0

...または発明しないで車輪を再発明する:実績のある Apache commons-io からFileUtils.copyFileを使用して、1 行でそれを行います。

(注意: このコメントは見た目ほど無害ではありFile.renameません: Windows 共有ではうまく機能しません - commons-io は常にこれらのことを行うための安全な賭けです)

編集

  1. Stackoverflow は「宿題」をする場所ではありません。または、少なくともそう言わなければなりません。あなたの問題が現実ではないということではありません。目的が異なるということです。あなたは何かを学びたいのですが、最小限のメンテナンスで確実に機能させたいのです。
  2. ...これは私の 2 番目のポイントにつながります。プロとしての生活を送っているときは、これを二度とプログラムしないでください。あなたが発見したように、それを機能させたとしても、それは非常に非効率的で、エラーを正しく処理しないなどの可能性があります.これは、常に見かけよりもトリッキーな IO に特に当てはまります。
  3. 最後に、Apache 2.0 ライセンスの下で信頼できるライブラリへのリンクを提供したので、ソース コードを確認できたでしょうか?
于 2013-03-21T12:14:54.843 に答える
0

さて、何が起こっているのかわかりました。ほんとうにうっかりミスでした。

他の誰かがこの問題を抱えている場合、私は自分のプライドを脇に置きます. 無限ループではなく、ByteStreams を使用したコピーに AGES がかかるだけです。小さな画像ファイルから高速な結果を期待していましたが、小さな画像ファイルでもコピーに長い時間がかかります。30 秒間実行したところ、プログラムは正常に終了し、イメージ コピーは正常に作成されました。

それが解決されたことを神に感謝します、私は心配し始めていました。

于 2013-03-21T22:39:07.737 に答える