# Download und speichern mit jsch klappt nicht



## Joob (25. Jul 2019)

Ich versuche eine Datei mit jsch zu downloaden und zu speichern, das haut aber nicht hin.
Springende Punkt scheint es zu sein das eine Permission fehlt.
Ich finde aber nicht heraus welche und ob es wirklich so ist.

Code :

```
if (Environment.getExternalStorageState().equals(
                        Environment.MEDIA_MOUNTED)) {
                    Log.d ( TAGOT, "sd present " + Environment.getDataDirectory ().toString () );
                    Toast.makeText (MainActivity.this , "sd present " + Environment.getDataDirectory ().toString (), Toast.LENGTH_LONG).show ( );
                } else {
                    Toast.makeText (MainActivity.this , "sd not present ", Toast.LENGTH_LONG).show ( );
                }

                SFtpToolsClass sftp = new SFtpToolsClass ();

                File folder = new File("/data");
                if (!(folder.exists ()))
                {

                    folder.mkdir ();
                }

                String strLocalPathFileName = folder.toString ()  + "/uploadedFile.zip";
                String strRemotePathFileName = "BLOCKS/101.zip";
                sftp.downloadFile ( strLocalPathFileName, strRemotePathFileName,  null, probar );
                
                
    SFptToolClass ____________________________________
    
    public boolean downloadFile (String strLocalPathFileName, String strRemotePathFileName, String[][] alternativAccess, ProgressBar probar) throws IOException {

        // strLocalPathFileName -> C:/uploadedFile.zip
        // strRemotePathFileName -> BLOCKS/48.zip

        Boolean result = false;

        connectsftp(alternativAccess);

        try {
            channel.get( strRemotePathFileName, strLocalPathFileName, new ProgressMonitorClass(probar)  );
//          System.out.println("File " + strRemotePathFileName + " has been downloaded successfully.");
            result = true;

        } catch( SftpException ex ) {
            System.err.println("File " + strRemotePathFileName + " not downloaded.");
            throw new IOException( ex );

        } finally {
            logout();
        }

        return result;

    }
```

Meine Permissions im Manifest sind :
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />                      <!--before access to hoster you must check state with connectivity Manager-->
<uses-permission android:name="android.permission.INTERNET" />                                  <!--access hoster-->
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />                    <!--scheduler-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />                    <!--schreiben auf SD Card-->


und die Exception ist :

```
W/System.err: File BLOCKS/101.zip not downloaded.
W/System.err: java.io.IOException: 4:
W/System.err:     at com.job.vt.sys.SFtpToolsClass.downloadFile(SFtpToolsClass.java:351)
        at com.job.vt.MainActivity.checkLoginData(MainActivity.java:274)
        at com.job.vt.MainActivity.access$200(MainActivity.java:43)
        at com.job.vt.MainActivity$1.onClick(MainActivity.java:120)
        at android.view.View.performClick(View.java:6294)
        at android.view.View$PerformClick.run(View.java:24770)
W/System.err:     at android.os.Handler.handleCallback(Handler.java:790)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:164)
        at android.app.ActivityThread.main(ActivityThread.java:6494)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
W/System.err: Caused by: 4:
        at com.jcraft.jsch.ChannelSftp.get(ChannelSftp.java:1003)
        at com.jcraft.jsch.ChannelSftp.get(ChannelSftp.java:892)
        at com.job.vt.sys.SFtpToolsClass.downloadFile(SFtpToolsClass.java:345)
        ... 12 more
    Caused by: java.io.FileNotFoundException: /data/uploadedFile.zip (Permission denied)
W/System.err:     at java.io.FileOutputStream.open0(Native Method)
        at java.io.FileOutputStream.open(FileOutputStream.java:287)
        at java.io.FileOutputStream.<init>(FileOutputStream.java:223)
        at java.io.FileOutputStream.<init>(FileOutputStream.java:110)
        at com.jcraft.jsch.ChannelSftp.get(ChannelSftp.java:979)
        ... 14 more
```

Ich bin gerade dabei mir die Umgebung für die App aufzubauen und wollte dabei auf Klassen zurückgreifen die ich mit netbeans geschrieben habe.


----------



## mihe7 (25. Jul 2019)

Joob hat gesagt.:


> java.io.FileNotFoundException: /data/uploadedFile.zip (Permission denied)


Die Meldung ist doch ziemlich eindeutig.


----------



## Joob (26. Jul 2019)

Ja es fehlt eine Permission, wahrscheinlich die das die App Daten auf dem Device speichern darf
aber ich habe doch die Permission 
android.permission.WRITE_EXTERNAL_STORAGE 
gesetzt.

Oder liege ich da ganz falsch ?


----------



## Joob (26. Jul 2019)

Ach so, data scheint auch das falsche Verzeichnis zu sein.
Hab ich nur aus Mangel an Ideen gewählt, nachdem sdcard nicht geklappt hat und ich unter data im virtuellen Device ein Verzeichniss gefunden habe was ich angelegt haben müsste


----------



## mihe7 (26. Jul 2019)

Ich denke, hier (http://www.diller-technologies.de/android_fileStorage.html) wird das ganz gut erklärt.


----------



## Joob (7. Aug 2019)

Danke, das hat geholfen.
Kann jetzt  speichern und über view/Windows Tool / Device File Explore alles prüfen.


----------

