1

それは 07-07 16:34:48.270 を表示します: W/System.err(6050): java.io.IOException をコピーします 私はすでに許可を与えられています

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" /> 

ファイルコピーコード:

  File file = new File("/mnt/sdcard/infobooks/");

            if (file.exists() == false) {
                file.mkdirs();
            }

            InputStream myInput = this.getAssets().open("Book4.pdf");
            String outFileName = Environment.getExternalStorageDirectory()+"/infobooks/Book4.pdf";
            File file2=new File(outFileName);
            file2.createNewFile();

            FileOutputStream myOutput = new FileOutputStream(outFileName);

            // transfer bytes from the inputfile to the outputfile
            byte[] buffer = new byte[1024];
            int length;
            while ((length = myInput.read(buffer)) > 0) {
                myOutput.write(buffer, 0, length);
            }

            // Close the streams
            myOutput.flush();
            myOutput.close();
            myInput.close();
4

1 に答える 1

0

その音から、エラーは外部ストレージへの書き込みではなく、アセットからの読み取りに関連しています。ファイル 'Book4.pdf' は assets ディレクトリに存在しますか? それはどれくらい大きいですか?実行している Android のバージョンは何ですか? Android では、圧縮が使用されているときにアセットのファイル サイズに制限があった時期がありました。Android 2.3 より前では、AssetManager は大きな圧縮ファイルを読み取ることができませんでした (大きなファイルとは、圧縮されていない状態で 1MB を超えることを意味します)。これを回避する方法は、ファイルを圧縮しない (jpg や png など、aapt が圧縮をスキップする拡張子をファイルに与える) か、コマンドライン ビルドに行くか、ファイルを小さなチャンクに分割してからデバイス上で再構成することでした。

ただし、完全なスタック トレースがなければ、エラーの原因を正確に知ることはできません。

于 2012-07-07T13:08:22.317 に答える