Android не может скопировать изображение в другую папку - PullRequest
0 голосов
/ 02 июня 2018

Я создал две папки в своем телефоне. У одного есть изображение. При нажатии кнопки я хочу скопировать из одной папки в другую. Я получаю событие FileNotFoundException, хотя я проверяю, существует ли оно. Я также объявил разрешение. Нижеэто код. Пожалуйста, найдите ошибку, которую я сделал.

Класс Java:

 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

1 Ответ

0 голосов
/ 02 июня 2018

Исключение вызвано тем, что нет файла с именем 'File2' FileNotFoundException: / storage / emulated / 0 / File2: открыть не удалось: EISDIR (является каталогом) .Судя по всему, 'File2' - это каталог.

Вы должны указать действительный путь в своем коде (обратите внимание на тонкий: "/ File2 / BronzeCopy.jpg" ):

File file=new File(Environment.getExternalStorageDirectory()+"/File1");
File internalfle=new File(file+"/Bronze.jpg");
File tocopy=new File(Environment.getExternalStorageDirectory()+"/File2/BronzeCopy.jpg");

Следующий код просто гарантирует, что файл существует (но он также может быть каталогом)

if (tocopy.exists())

Поэтому то, что вы намереваетесь, выглядит примерно так:

if (tocopy.exists() && !tocopy.isDirectory()) 

Вы также должны разобраться со случаем, когда путь 'tocopy' недопустим для обеспечения надежного решения.

...