Android的 - SD卡不创建/复制文件 [英] Android - Sdcard doesn't create / copy a file
问题描述
我有一些问题,复制一个文件夹到其他文件夹中的文件;两者都是在SD卡。
我想从 /sdcard/folder1/file.db
复制到 / SD卡/文件夹1 /文件夹2
(如果创造不存在) /file.db
AndroidManifest.xml中
<使用许可权的android:NAME =android.permission.WRITE_EXTERNAL_STORAGE>< /使用许可权>
我的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_STORAGE/>
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屋!