Android的 - SD卡不创建/复制文件 [英] Android - Sdcard doesn't create / copy a file

查看:190
本文介绍了Android的 - SD卡不创建/复制文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一些问题,复制一个文件夹到其他文件夹中的文件;两者都是在SD卡。

我想从 /sdcard/folder1/file.db 复制到 / SD卡/文件夹1 /文件夹2 (如果创造不存在) /file.db

AndroidManifest.xml中

 <使用许可权的android:NAME =android.permission.WRITE_EXTERNAL_STORAG​​E>< /使用许可权>

我的code

 公共无效realizarBackup()
{
    字符串nombrebd =BRSAndroid.db;    文件SD =新的文件(Environment.getExternalStorageDirectory()的getPath());    如果(sd.exists()及&放大器; sd.canWrite()){      文件bdoriginal =新的文件(sd.getAbsolutePath()+/ BRSAndroid /+ nombrebd);
      文件directoriobackup =新的文件(sd.getAbsolutePath()+/ BRSAndroid /备份/);
      文件备份=新的文件(sd.getAbsolutePath()+/ BSRAndroid /备份/+ nombrebd);      directoriobackup.mkdir(); //它创建该文件夹,这不会失败。      如果(directoriobackup.exists())
      {
          尝试{
              如果(backup.canRead()){
                  如果(backup.canWrite())
                      backup.createNewFile();
                  其他
                      Log.e(错误,没有tiene permisos第escribir。);
              信息} else //止于此
                  Log.e(错误,没有tiene permisos第媚眼。);          }赶上(IOException异常E1){
              Log.e(错误,错误人CREAR EL fichero BRSAndroid带拉carpeta德DESTINO。);
          }
          如果(backup.exists()){
            尝试{
                InputStream的ENTRADA =新的FileInputStream(bdoriginal);
                萨利达的OutputStream =新的FileOutputStream(备份);                字节[] buf中=新的字节[1024];
                INT longitud;                而((longitud = entrada.read(BUF))大于0){
                    salida.write(BUF,0,longitud);
                }
                entrada.close();
                salida.close();
            }赶上(例外五){
                Log.e(错误,错误一拉霍拉日hacerse EL备份。);
            }
          }
      }
      其他
      {
        Log.e(错误,错误连接洛杉矶creación德尔上级目录/备份/);
      }
    }
}

我是什么做错了吗?我陷在这里,我不能先走。

我发现备份还没有得到读取权限。

LogCat中的日志:

 九月七日至25日:37:05.578:W / System.err的(16602):java.io.IOException异常:打开失败:ENOENT(没有这样的文件或目录)
九月7日至25日:37:05.578:W / System.err的(16602):在java.io.File.createNewFile(File.java:940)
九月7日至25日:37:05.586:W / System.err的(16602):在NS.Android.Clientes.ClientesActivity.realizarBackup(ClientesActivity.java:1602)
九月7日至25日:37:05.586:W / System.err的(16602):在NS.Android.Clientes.ClientesActivity $ 4.onClick(ClientesActivity.java:398)
九月7日至25日:37:05.586:W / System.err的(16602):在android.view.View.performClick(View.java:4222)
九月7日至25日:37:05.586:W / System.err的(16602):在android.view.View $ PerformClick.run(View.java:17337)
九月7日至25日:37:05.594:W / System.err的(16602):在android.os.Handler.handleCallback(Handler.java:615)
九月7日至25日:37:05.594:W / System.err的(16602):在android.os.Handler.dispatchMessage(Handler.java:92)
九月7日至25日:37:05.594:W / System.err的(16602):在android.os.Looper.loop(Looper.java:137)
九月7日至25日:37:05.594:W / System.err的(16602):在android.app.ActivityThread.main(ActivityThread.java:4895)
九月7日至25日:37:05.594:W / System.err的(16602):在java.lang.reflect.Method.invokeNative(本机方法)
九月7日至25日:37:05.601:W / System.err的(16602):在java.lang.reflect.Method.invoke(Method.java:511)
九月7日至25日:37:05.601:W / System.err的(16602):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:994)
九月7日至25日:37:05.601:W / System.err的(16602):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:761)
九月7日至25日:37:05.601:W / System.err的(16602):在dalvik.system.NativeStart.main(本机方法)
九月7日至25日:37:05.609:W / System.err的(16602):libcore.io.ErrnoException:产生的原因打开失败:ENOENT(没有这样的文件或目录)
九月7日至25日:37:05.609:W / System.err的(16602):在libcore.io.Posix.open(本机方法)
九月7日至25日:37:05.609:W / System.err的(16602):在libcore.io.BlockGuardOs.open(BlockGuardOs.java:110)
九月7日至25日:37:05.609:W / System.err的(16602):在java.io.File.createNewFile(File.java:933)
九月7日至25日:37:05.617:W / System.err的(16602):... 13个

解决更改为String一个文件路径。

 字符串鲁塔= Environment.getExternalStorageDirectory()的getPath()+/ BRSAndroid /
字符串nombrebd =BRSAndroid.db;
文件bdoriginal =新的文件(鲁塔+ nombrebd);
文件备份=新的文件(鲁塔+备份/+ nombrebd);


解决方案

您还应该添加下列权限<使用许可权的android:NAME =android.permission.READ_EXTERNAL_STORAG​​E/>

I am having some problems copying a file from a folder to other folder; both are in SDCard.

I want to copy from /sdcard/folder1/file.db to /sdcard/folder1/folder2(creating if doesn't exist)/file.db

AndroidManifest.xml

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

My code

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

    File sd = new File(Environment.getExternalStorageDirectory().getPath());

    if (sd.exists() && sd.canWrite()){

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

      directoriobackup.mkdir(); // It creates this folder, this doesn't fail.

      if (directoriobackup.exists())
      {
          try {
              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.");

          } catch (IOException e1) {
              Log.e("Error", "Error al crear el fichero BRSAndroid en la carpeta de destino.");
          }
          if(backup.exists()) {
            try {
                InputStream entrada = new FileInputStream(bdoriginal);
                OutputStream salida = new FileOutputStream(backup);

                byte[] buf = new byte[1024];
                int longitud;

                while((longitud = entrada.read(buf)) > 0){
                    salida.write(buf, 0, longitud);
                }
                entrada.close();
                salida.close();
            } catch (Exception e){
                Log.e("Error", "Error a la hora de hacerse el backup.");
            }
          }
      }
      else
      {
        Log.e("Error", "Error en la creación del directorio /Backup/.");
      }
    }
}

What am I doing wrong? I get stuck right here and I can't go ahead.

I have discovered that the backup hasn't got read permissions.

LogCat log:

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

Solved changing path from File to String.

String ruta = Environment.getExternalStorageDirectory().getPath()+"/BRSAndroid/"
String nombrebd = "BRSAndroid.db";
File bdoriginal = new File(ruta + nombrebd);
File backup = new File(ruta + "Backup/" + nombrebd);

解决方案

you should also add following permission <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

这篇关于Android的 - SD卡不创建/复制文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆