0

以下は、txtファイルを含むフォルダーをコピーするために使用するコードです。フォルダーは、アプリケーションの assets フォルダーにあります。をコピーしているときに、行out = new FileOutputStream(newFileName);で File not found 例外が発生します。

これを /data/data フォルダーに保存すると、これが完全に機能します。すなわち; 内部メモリ。SDカードの状態を確認したところ、マウントされています。

public class CpyAsset extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    copyFileOrDir("edu1");//directory name in assets
}
File sdCard = Environment.getExternalStorageDirectory();
private void copyFileOrDir(String path) {
    AssetManager assetManager = this.getAssets();
    String assets[] = null;
    try {
        assets = assetManager.list(path);
        if (assets.length == 0) {
            copyFile(path);
        } else {
            File dir = new File (sdCard.getAbsolutePath());
            if (!dir.exists()){
                System.out.println("Created directory"+sdCard.getAbsolutePath());
                boolean result = dir.mkdir();
                System.out.println("Result of directory creation"+result);
            }

            for (int i = 0; i < assets.length; ++i) {
                copyFileOrDir(path + "/" + assets[i]);
            }
        }
    } catch (IOException ex) {
        System.out.println("Exception in copyFileOrDir"+ex);
    }
}

private void copyFile(String filename) {
    AssetManager assetManager = this.getAssets();

    InputStream in = null;
    OutputStream out = null;
    try {
        in = assetManager.open(filename);
        String newFileName = sdCard.getAbsolutePath() + "/"+filename;
        out = new FileOutputStream(newFileName);
        byte[] buffer = new byte[1024];
        int read;
        while ((read = in.read(buffer)) != -1) {
            out.write(buffer, 0, read);
        }
        in.close();
        in = null;
        out.flush();
        out.close();
        out = null;
    } catch (Exception e) {
        System.out.println("Exception in copyFile"+e);
    }

}
}

例外

01-01 06:13:34.783: INFO/System.out(11334): Exception in copyFilejava.io.FileNotFoundException: /mnt/sdcard/edu1/anees.txt: open failed: ENOENT (No such file or directory)

コピーしようとしているフォルダー (およびコンテンツ) は assets/edu1/abc.txt にあります

明らかな理由が見つからないので、誰かがこれの原因を教えてもらえますか? どんな助けでも大歓迎です。

4

3 に答える 3

2

この部分では、常に外部ストレージのルートディレクトリを作成しようとしています。

File dir = new File (sdCard.getAbsolutePath());
if (!dir.exists()){
            System.out.println("Created directory"+sdCard.getAbsolutePath());
            boolean result = dir.mkdir();
            System.out.println("Result of directory creation"+result);
}

したがって、フォルダedu1/を作成しておらず、そのフォルダ内のファイルの作成anees.txtは失敗します。

于 2012-06-19T13:44:54.890 に答える
1

コードでは、sdcard パスが存在するかどうかを確認しますが、パスを確認する必要があるため、ディレクトリ「edu1」が作成されません。代わりにこれを使用してみてください。

File dir = new File (sdCard.getAbsolutePath()+"/"+path);
于 2012-06-19T13:35:25.097 に答える
1

この方法で試してみてください........

File f = new File("/sdcard/assets/edu1/abc.txt");

FileWriter fw = new FileWriter(f);

BufferedWriter bw = new BufferedWriter(fw);
于 2012-06-19T13:26:41.930 に答える