Android-SD卡没有';t创建/复制文件

Android-SD卡没有';t创建/复制文件,android,sd-card,Android,Sd Card,我在将文件从一个文件夹复制到另一个文件夹时遇到一些问题;两者都在SD卡中 我想从/sdcard/folder1/file.db复制到/sdcard/folder1/folder2(如果不存在则创建)/file.db AndroidManifest.xml <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission> 我做错了什么?我被困在这里,无法

我在将文件从一个文件夹复制到另一个文件夹时遇到一些问题;两者都在SD卡中

我想从
/sdcard/folder1/file.db
复制到
/sdcard/folder1/folder2
(如果不存在则创建)
/file.db

AndroidManifest.xml

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
我做错了什么?我被困在这里,无法前进

我发现备份没有读取权限

LogCat日志:

07-25 09:37:05.578: W/System.err(16602): java.io.IOException: open failed: ENOENT (No such file or directory)
07-25 09:37:05.578: W/System.err(16602):    at java.io.File.createNewFile(File.java:940)
07-25 09:37:05.586: W/System.err(16602):    at NS.Android.Clientes.ClientesActivity.realizarBackup(ClientesActivity.java:1602)
07-25 09:37:05.586: W/System.err(16602):    at NS.Android.Clientes.ClientesActivity$4.onClick(ClientesActivity.java:398)
07-25 09:37:05.586: W/System.err(16602):    at android.view.View.performClick(View.java:4222)
07-25 09:37:05.586: W/System.err(16602):    at android.view.View$PerformClick.run(View.java:17337)
07-25 09:37:05.594: W/System.err(16602):    at android.os.Handler.handleCallback(Handler.java:615)
07-25 09:37:05.594: W/System.err(16602):    at android.os.Handler.dispatchMessage(Handler.java:92)
07-25 09:37:05.594: W/System.err(16602):    at android.os.Looper.loop(Looper.java:137)
07-25 09:37:05.594: W/System.err(16602):    at android.app.ActivityThread.main(ActivityThread.java:4895)
07-25 09:37:05.594: W/System.err(16602):    at java.lang.reflect.Method.invokeNative(Native Method)
07-25 09:37:05.601: W/System.err(16602):    at java.lang.reflect.Method.invoke(Method.java:511)
07-25 09:37:05.601: W/System.err(16602):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:994)
07-25 09:37:05.601: W/System.err(16602):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:761)
07-25 09:37:05.601: W/System.err(16602):    at dalvik.system.NativeStart.main(Native Method)
07-25 09:37:05.609: W/System.err(16602): Caused by: libcore.io.ErrnoException: open failed: ENOENT (No such file or directory)
07-25 09:37:05.609: W/System.err(16602):    at libcore.io.Posix.open(Native Method)
07-25 09:37:05.609: W/System.err(16602):    at libcore.io.BlockGuardOs.open(BlockGuardOs.java:110)
07-25 09:37:05.609: W/System.err(16602):    at java.io.File.createNewFile(File.java:933)
07-25 09:37:05.617: W/System.err(16602):    ... 13 more
解决了将路径从文件更改为字符串的问题。
您还应该添加以下权限

您还应该添加以下权限

这样使用

    public void realizarBackup()
  {
          String nombrebd = "BRSAndroid.db";

         File bdoriginal = new File(Environment.getExternalStorageDirectory() + "/BRSAndroid/" + nombrebd);
        File directoriobackup = new File(Environment.getExternalStorageDirectory() + "/BRSAndroid/Backup/");
        File backup = new File(Environment.getExternalStorageDirectory() + "/BSRAndroid/Backup/" + nombrebd);

           if(!directoriobackup .exists())
              {
                  directoriobackup .mkdir();
              }


              if (!backup.exists()) {
                      try {
                          backup.createNewFile();
                          FileChannel src = new FileInputStream(bdoriginal).getChannel();
                          FileChannel dst = new FileOutputStream(backup).getChannel();
                          dst.transferFrom(src, 0, src.size());
                          src.close();
                          dst.close();

                      } catch (IOException e) {
                          e.printStackTrace();
                      }
              }
    }
希望这能对你有所帮助。

像这样使用

    public void realizarBackup()
  {
          String nombrebd = "BRSAndroid.db";

         File bdoriginal = new File(Environment.getExternalStorageDirectory() + "/BRSAndroid/" + nombrebd);
        File directoriobackup = new File(Environment.getExternalStorageDirectory() + "/BRSAndroid/Backup/");
        File backup = new File(Environment.getExternalStorageDirectory() + "/BSRAndroid/Backup/" + nombrebd);

           if(!directoriobackup .exists())
              {
                  directoriobackup .mkdir();
              }


              if (!backup.exists()) {
                      try {
                          backup.createNewFile();
                          FileChannel src = new FileInputStream(bdoriginal).getChannel();
                          FileChannel dst = new FileOutputStream(backup).getChannel();
                          dst.transferFrom(src, 0, src.size());
                          src.close();
                          dst.close();

                      } catch (IOException e) {
                          e.printStackTrace();
                      }
              }
    }

希望这能对您有所帮助。

这段话没有什么意义:

if(backup.canRead()){
    if(backup.canWrite())
        backup.createNewFile();
    else 
        Log.e("Error", "No tiene permisos para escribir.");
} else // STOPS HERE
    Log.e("Error", "No tiene permisos para leer.");
当然,您将无法读取或写入尚未创建的文件!你的意思是像这样事后检查吗

backup.createNewFile(); // create, THEN check if you can read and write
if (!backup.canRead())
    Log.e("Error", "No tiene permisos para leer.");
if (!backup.canWrite())
    Log.e("Error", "No tiene permisos para escribir.");

或者,您可能是想检查您是否可以阅读
bdoriginal
,或者检查您是否可以读写
directoriobackup

这段代码实际上没有意义:

if(backup.canRead()){
    if(backup.canWrite())
        backup.createNewFile();
    else 
        Log.e("Error", "No tiene permisos para escribir.");
} else // STOPS HERE
    Log.e("Error", "No tiene permisos para leer.");
当然,您将无法读取或写入尚未创建的文件!你的意思是像这样事后检查吗

backup.createNewFile(); // create, THEN check if you can read and write
if (!backup.canRead())
    Log.e("Error", "No tiene permisos para leer.");
if (!backup.canWrite())
    Log.e("Error", "No tiene permisos para escribir.");

或者,您可能是想检查您是否可以读取
bdoriginal
,或者检查您是否可以读取和写入
directoriobackup

是否有错误?不,我没有,我将使用Logcat信息进行更新。是否有错误?不,我没有,我将使用Logcat信息进行更新。我已将此权限添加到AndroidManifest.xml,但仍无法获取我的文件…我已将此权限添加到AndroidManifest.xml,但仍无法获取我的文件…@JoseMontero按原样使用我的代码。因为它对我有用。并确保您的BRSAndroid.db db文件是否已找到。它对我不起作用,它在backup.createNewFile()中停止并转到catch…您是否检查了您的db文件夹?@josemontro按原样使用我的代码。因为它对我有用。并确保您的BRSAndroid.db db文件是否已找到。它对我无效,它会在backup.createNewFile()中停止并转到catch…您是否检查了您的db文件夹?