0

私はこのコードを試しています:

http://androidgenuine.com/?tag=export-database-android

私の例でこのコードを使用することにより、FileNotFoundExceptionFileInputStream の読み取り中にフォルダーが外部ストレージに存在するにもかかわらず、常に を取得しています。

これが私のコードです:

public void exportdata()
    {

        try 
        {

            myInput = new FileInputStream("/data/data/com.example.hello/databases/BikeMaintenance.db");
            File directory = new File("/sdcard/BikeMaintenance/Data/");
            // Create the folder if it doesn't exist:
            if (!directory.exists()) 
            {
                directory.mkdirs();
            } 

            OutputStream myOutput = new FileOutputStream(directory.getPath()+"/BikeMaintenance.backup");
            byte[] buffer = new byte[1024];
            int length;
            while ((length = myInput.read(buffer))>0)
            {

                myOutput.write(buffer, 0, length);
                msg="Backup Succesfull!";
                Toast.makeText(MainPage.this,msg,Toast.LENGTH_SHORT).show();
            }
            // Close and clear the streams
            myOutput.flush();
            myOutput.close();        
            myInput.close();
        }
        catch (FileNotFoundException e) 
        {
            msg="FileNotFoundException";
            Toast.makeText(MainPage.this,msg,Toast.LENGTH_SHORT).show();

            e.printStackTrace();
        } 
        catch (IOException e) 
        {
            msg="Backup Unsuccesfull!";
            Toast.makeText(MainPage.this,msg,Toast.LENGTH_SHORT).show();
        }

    }

どこが間違っていますか?この理由は何ですか?これの解決策を検索しましたが、解決策が見つかりませんでした。

logcat の出力は次のとおりです。

java.io.FileNotFoundException:
/data/data/com.example.hello/databases/BikeMaintenance.db: 開く
失敗しました: ENOENT (そのようなファイルまたはディレクトリはありません)
  libcore.io.IoBridge.open (IoBridge.java:416) で
  java.io.FileInputStream.(FileInputStream.java:78) で
  java.io.FileInputStream.(FileInputStream.java:105) で
  com.example.hello.MainPage.exportdata (MainPage.java:625) で
  com.example.hello.MainPage.backup (MainPage.java:692) で
  com.example.hello.MainPage$1.onClick(MainPage.java:494) で
  com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:166) で
  android.os.Handler.dispatchMessage(Handler.java:99) で
  android.os.Looper.loop(Looper.java:137)
  Android.app.ActivityThread.main (ActivityThread.java:4745) で
  java.lang.reflect.Method.invokeNative(ネイティブ メソッド) で
  java.lang.reflect.Method.invoke(Method.java:511) で
  com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) で
  com.android.internal.os.ZygoteInit.main (ZygoteInit.java:553) で
  dalvik.system.NativeStart.main (ネイティブ メソッド) で
原因: libcore.io.ErrnoException: オープンに失敗しました:
ENOENT (そのようなファイルまたはディレクトリーはありません)
  libcore.io.Posix.open(ネイティブメソッド)で
  libcore.io.BlockGuardOs.open(BlockGuardOs.java:110) で
  libcore.io.IoBridge.open(IoBridge.java:400) で
  ... 14以上
4

2 に答える 2

0

Androidのドキュメントから

public FileInputStream (File file)

Constructs a new FileInputStream that reads from file.

Parameters
file    the file from which this stream reads.
Throws
FileNotFoundException   if file does not exist.

存在するフォルダーについて話しますが、エラーはファイルに関するものです。おそらくadbを使用して、ファイルが実際に存在するかどうかを再確認してください

$ adb shell ls /data/data/com.example.hello/databases/BikeMaintenance.db

またはそれを含むディレクトリの許可。

于 2013-04-07T15:20:40.603 に答える