Android无法将图像复制到其他文件夹
我在手机中创建了两个文件夹。其中一个文件夹有图像。单击按钮后,我想从一个文件夹复制到另一个文件夹。即使我检查是否存在FileNotFoundException,我也会收到一个FileNotFoundException。我还声明了权限。下面是代码。请查找我所犯的错误 Java类:Android无法将图像复制到其他文件夹,android,filenotfoundexception,Android,Filenotfoundexception,我在手机中创建了两个文件夹。其中一个文件夹有图像。单击按钮后,我想从一个文件夹复制到另一个文件夹。即使我检查是否存在FileNotFoundException,我也会收到一个FileNotFoundException。我还声明了权限。下面是代码。请查找我所犯的错误 Java类: File file=new File(Environment.getExternalStorageDirectory()+"/File1"); File internalfl
File file=new File(Environment.getExternalStorageDirectory()+"/File1");
File internalfle=new File(file+"/Bronze.jpg");
File tocopy=new File(Environment.getExternalStorageDirectory()+"/File2");
if (internalfle.exists())
{
if (tocopy.exists())
{
Toast.makeText(getApplicationContext(),"File exists",Toast.LENGTH_SHORT).show();
try {
InputStream fileInputStream=new FileInputStream(internalfle.getAbsolutePath());
OutputStream outputStream=new FileOutputStream(tocopy.getAbsolutePath());
byte[] buffer=new byte[1024];
int len;
while ((len=fileInputStream.read(buffer))>0)
{
outputStream.write(buffer,0,len);
}
fileInputStream.close();
outputStream.close();
Toast.makeText(getApplicationContext(),"Copied",Toast.LENGTH_SHORT).show();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
else
{
Toast.makeText(getApplicationContext(),"Does not Exist",Toast.LENGTH_SHORT).show();
}
例外情况:
06-02 20:06:41.782 23544-23544/com.globemaster.com.test W/System.err: java.io.FileNotFoundException: /storage/emulated/0/File2: open failed: EISDIR (Is a directory)
at libcore.io.IoBridge.open(IoBridge.java:452)
at java.io.FileOutputStream.<init>(FileOutputStream.java:87)
at java.io.FileOutputStream.<init>(FileOutputStream.java:127)
at java.io.FileOutputStream.<init>(FileOutputStream.java:116)
at com.globemaster.com.test.MainActivity$1$override.onClick(MainActivity.java:65)
06-02 20:06:41.792 23544-23544/com.globemaster.com.test W/System.err: at com.globemaster.com.test.MainActivity$1$override.access$dispatch(MainActivity.java)
at com.globemaster.com.test.MainActivity$1.onClick(MainActivity.java)
at android.view.View.performClick(View.java:5716)
at android.widget.TextView.performClick(TextView.java:10926)
at android.view.View$PerformClick.run(View.java:22596)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:7325)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
Caused by: android.system.ErrnoException: open failed: EISDIR (Is a directory)
06-02 20:06:41.792 23544-23544/com.globemaster.com.test W/System.err: at libcore.io.Posix.open(Native Method)
at libcore.io.BlockGuardOs.open(BlockGuardOs.java:186)
at libcore.io.IoBridge.open(IoBridge.java:438)
... 16 more
06-02 20:06:41.782 23544-23544/com.globemaster.com.test W/System.err:java.io.FileNotFoundException:/storage/emulated/0/File2:open失败:EISDIR(是一个目录)
在libcore.io.IoBridge.open中(IoBridge.java:452)
位于java.io.FileOutputStream。(FileOutputStream.java:87)
位于java.io.FileOutputStream。(FileOutputStream.java:127)
位于java.io.FileOutputStream。(FileOutputStream.java:116)
位于com.globemaster.com.test.MainActivity$1$override.onClick(MainActivity.java:65)
06-02 20:06:41.792 23544-23544/com.globemaster.com.test W/System.err:at com.globemaster.com.test.MainActivity$1$override.access$dispatch(MainActivity.java)
位于com.globemaster.com.test.MainActivity$1.onClick(MainActivity.java)
在android.view.view.performClick上(view.java:5716)
在android.widget.TextView.performClick上(TextView.java:10926)
在android.view.view$PerformClick.run(view.java:22596)
位于android.os.Handler.handleCallback(Handler.java:739)
位于android.os.Handler.dispatchMessage(Handler.java:95)
位于android.os.Looper.loop(Looper.java:148)
位于android.app.ActivityThread.main(ActivityThread.java:7325)
位于java.lang.reflect.Method.invoke(本机方法)
在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run上(ZygoteInit.java:1230)
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
原因:android.system.ErrnoException:open失败:EISDIR(是一个目录)
06-02 20:06:41.792 23544-23544/com.globemaster.com.test W/System.err:at libcore.io.Posix.open(本机方法)
在libcore.io.BlockGuardOs.open上(BlockGuardOs.java:186)
在libcore.io.IoBridge.open中(IoBridge.java:438)
... 还有16个
导致异常的原因是没有名为“File2”FileNotFoundException:/storage/emulated/0/File2:open failed:EISDIR(是一个目录)的文件。从外观上看,“File2”是一个目录
您必须在代码中提供一个有效路径(请注意微妙之处:“/File2/BronzeCopy.jpg”):
下面的代码只是确保文件存在(但也可以是目录)
因此,你想要的是:
if (tocopy.exists() && !tocopy.isDirectory())
您还必须处理“tocopy”路径对于提供可靠解决方案无效的情况 导致异常的原因是没有名为“File2”FileNotFoundException:/storage/emulated/0/File2:open failed:EISDIR(是一个目录)的文件。从外观上看,“File2”是一个目录 您必须在代码中提供一个有效路径(请注意微妙之处:“/File2/BronzeCopy.jpg”): 下面的代码只是确保文件存在(但也可以是目录) 因此,你想要的是:
if (tocopy.exists() && !tocopy.isDirectory())
您还必须处理“tocopy”路径对于提供可靠解决方案无效的情况 因此,我应该为要复制到另一个文件夹(BronzeCopy.jpg)的图像指定一个名称。是的。这就是问题所在。谢谢。确切地说,为了避免硬编码名称“brown”->“BronzeCopy”,您应该有另一种方法来处理此问题“您还必须处理‘tocopy’路径对于提供可靠解决方案无效的情况。”您的意思是什么?因此,我应该为要复制到另一个文件夹(BronzeCopy.jpg)的图像指定一个名称是的。这就是问题所在。谢谢。确切地说,你应该有另一种方法来处理这个问题,以避免硬编码名称“Bronze”->“BronzeCopy”“你还必须处理“tocopy”路径不能提供可靠解决方案的情况。”你这是什么意思?
if (tocopy.exists() && !tocopy.isDirectory())