Android Fehler beim Speichern/Downloaden einer Datei

JavaWolf165

Mitglied
Hallo Java-Forum,

in meiner Android-App verwende ich folgenden Code um eine Datei auf der SD-Karte des Smartphones abzuspeichern:
Code:
public void download(final String url, final String savePath, final String saveName) {
    new Thread(new Runnable() {
        public void run() {
            try {
                URL sourceUrl = new URL(url);
                URLConnection conn = sourceUrl.openConnection();
                conn.connect();
                InputStream inputStream = conn.getInputStream();

                int fileSize = conn.getContentLength();
                
                File savefile = new File(savePath, saveName);
                if (savefile.exists()) {
                    savefile.delete();
                }
                savefile.createNewFile();

                FileOutputStream outputStream = new FileOutputStream(
                        savePath+saveName, true);

                AlertDialog.Builder loadPercentAlert = new AlertDialog.Builder(MainActivity.this);
                ProgressBar percentBar;
                loadPercentAlert.setTitle("Downloading...");
                percentBar = new ProgressBar(MainActivity.this);
                LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
                        LinearLayout.LayoutParams.MATCH_PARENT,
                        LinearLayout.LayoutParams.MATCH_PARENT);
                percentBar.setLayoutParams(lp);
                loadPercentAlert.setView(percentBar);
                loadPercentAlert.create().show();
                byte[] buffer = new byte[1024];
                int readCount = 0;
                int readNum = 0;
                int prevPercent = 0;
                while (readCount < fileSize && readNum != -1) {
                    readNum = inputStream.read(buffer);
                    if (readNum > -1) {
                        outputStream.write(buffer, 0, readNum);

                        readCount = readCount + readNum;

                        int percent = (int) (readCount * 100 / fileSize);
                        if (percent > prevPercent) {

                            prevPercent = percent;
                            percentBar.setProgress(percent);
                        }
                    }
                }
                loadPercentAlert.create().cancel();
                outputStream.flush();
                outputStream.close();
                inputStream.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }).start();
}
"savePath" ist /storage/extSdCard/freeButtons/

Beim benutzen dieser methode wird ein Fehler ausgeworfen:
Code:
java.io.FileNotFoundException: /storage/extSdCard/freeButtons/soundpack: open failed: EACCES (Permission denied)
07-10 14:53:17.857 19929-20124/loupix.de.freebuttons W/System.err:     at libcore.io.IoBridge.open(IoBridge.java:456)
07-10 14:53:17.857 19929-20124/loupix.de.freebuttons W/System.err:     at java.io.FileOutputStream.<init>(FileOutputStream.java:87)
07-10 14:53:17.857 19929-20124/loupix.de.freebuttons W/System.err:     at java.io.FileOutputStream.<init>(FileOutputStream.java:127)
07-10 14:53:17.857 19929-20124/loupix.de.freebuttons W/System.err:     at loupix.de.freebuttons.MainActivity$6.run(MainActivity.java:163)
07-10 14:53:17.857 19929-20124/loupix.de.freebuttons W/System.err:     at java.lang.Thread.run(Thread.java:818)
07-10 14:53:17.857 19929-20124/loupix.de.freebuttons W/System.err: Caused by: android.system.ErrnoException: open failed: EACCES (Permission denied)
07-10 14:53:17.857 19929-20124/loupix.de.freebuttons W/System.err:     at libcore.io.Posix.open(Native Method)
07-10 14:53:17.857 19929-20124/loupix.de.freebuttons W/System.err:     at libcore.io.BlockGuardOs.open(BlockGuardOs.java:186)
07-10 14:53:17.857 19929-20124/loupix.de.freebuttons W/System.err:     at libcore.io.IoBridge.open(IoBridge.java:442)
07-10 14:53:17.857 19929-20124/loupix.de.freebuttons W/System.err:     ... 4 more
So wie es aussieht, hat die App keinen Zugriff auf den Ordner/keine Permissions.
Code:
<uses-permission android:name="android.permission.INTERNET"/>;
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
sind hinzugefügt und auslesen einer Datei im Ordner funktioniert auch.
Wie könnte man den Fehler(erfolgreich) umgehen?

JavaWolf
 
Arbeitest du auf einem Gerät mit Android 6? Falls ja solltest du dir mal das permission System unter Android 6 ansehen. Falls nicht probier mal savefile.getParentFile().mkdirs(). Zeig uns bitte den Weg wie du savePath initialisierst und Zeile 163 aus MainActivity.
 
Entschuldigung, ich hatte beschlossen mein Projekt ganz neu anzugehen und würde diese Funktion nicht mehr benutzen. Danke für die Antwort, auch wenn ich das Thema nun abgehakt ist. Sorry 😀
 

Zurück
Oben