FileOutputStream a échoué avec l'erreur FileNotFoundException même si le Fichier apparemment, il existe, est accessible en écriture et dispose des autorisations

Même si je suis relativement nouvelle pour Android, j'ai de l'expérience en Java et C en fonction de la programmation et je suis actuellement en utilisant Eclipse, avec l'habitude d'outils pour le développement. J'ai lu la plupart des posts autour de ce sujet et je crois que j'ai compris et appliqué toutes les recommandations et les tests. Je l'ai déjà utilisé FileOutputStream à écrire à l'interne, spécifiques à l'application, les fichiers, créer pour L8, sans aucun problème. Je suis maintenant tring pour écrire dans un fichier sur la Carte SD, avec la construction L7 pour Android 2.1. Le code suivant est à partir de la seule activité avec 3 Boutons (écrire, lire & envoyer) que j'utilise pour tester le code de base. Bien que tous les tests (il existe, en écriture et une IOException sur createNewFile, ou mkdirs) menant à la FileOutputStream (FOS) constructeur passer AOK, le FOS construire échoue, en jetant le FileNotFoundException, voir ci-dessous. J'ai marché à travers de débogage et confirmé problème, voir le LogCat au fond. C'est en cours d'exécution sur l'Eclipse standard émulateur via la BAD avec une Carte SD inclus dans la construction de 256 ko.

De mon onw createExternalStorageFile() la méthode.

File file = null;
        file = new File(Environment.getExternalStorageDirectory(), mfileName);              
        if(file != null) {
            //file.mkdirs();
            try {
                file.createNewFile();
            } catch (IOException e1) {
                Log.e(TAG, "createNewFile() failed!", e1);
                return false; 
            } 
        }
        if(!file.exists()) {
            Log.d(TAG, "file does not exist!");
        }
        if(!file.canWrite()) {
            Log.d(TAG, "cannot write to file!");
        }
        Log.d(TAG, "full file-path is: " + file.toString());

        FileOutputStream fOS = null;
        try {
            //fOS = new FileOutputStream(file);
            fOS = new FileOutputStream(file.toString());
            //*** THIS THROW THE FILENOTFOUNDEXCEPTION ***
        } catch (FileNotFoundException e1) {
            Log.e(TAG, "fOS-FileNotFoundException", e1);
            return false;
        }
        //fOS IS STILL NULL - HOW CAN THIS BE!
        if(fOS != null) {
            try {
                fOS.write(TESTDATA.getBytes());
                fOS.close();
            } catch (IOException e1) {
                Log.e(TAG, "IOException from fOS-write()!", e1);
                return false;
            }
            Log.d(TAG, "fos-fd is: " + fOS.toString());
        }
        return true;

>

Mon fichier Manifest contient les utilise-l'autorisation déclaration comme suit:

>

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="org.eddiem.adeveloper.externalfilesend"
      android:versionCode="1" android:versionName="1.0">
    <uses-sdk android:minSdkVersion="7" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

    <application android:icon="@drawable/icon" android:label="@string/app_name" android:debuggable="true">
        <activity android:name=".ExternalFileSendActivity"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>

>

C'est donc à l'extérieur de la déclaration et devrait être OK?

Quelqu'un peut s'il vous plaît aider à résoudre cette énigme de pourquoi FileOutputStream est un échec, même si tous mes tests semblent confirmer cela devrait fonctionner?

>
LogCat:
11-02 15:40:54.754: DEBUG/MediaScannerService(154): lancez la numérisation à volume externe
11-02 15:40:54.764: VERBOSE/MediaProvider(154): /sdcard volume ID: 300427547
11-02 15:40:54.894: INFO/Système.(202): le débogueur est fixé (1479)
11-02 15:40:55.024: VERBOSE/MediaProvider(154): Attaché volume: externe
11-02 15:40:55.904: VERBOSE/MediaScanner(154): pruneDeadThumbnailFiles... android.database.sqlite.SQLiteCursor@44c434f0
11-02 15:40:55.915: VERBOSE/MediaScanner(154): /pruneDeadThumbnailFiles... android.database.sqlite.SQLiteCursor@44c434f0
11-02 15:40:55.925: DEBUG/MediaScanner(154): prescan temps: 715ms
11-02 15:40:55.955: DEBUG/MediaScanner(154): temps d'analyse: 4ms
11-02 15:40:55.955: DEBUG/MediaScanner(154): postscan temps: 55ms
11-02 15:40:55.955: DEBUG/MediaScanner(154): temps total: 774ms
11-02 15:40:55.964: DEBUG/MediaScannerService(154): fait de la numérisation de volume externe
11-02 15:44:50.934: DEBUG/KeyguardViewMediator(52): pokeWakelock(5000)
11-02 15:44:51.334: DEBUG/KeyguardViewMediator(52): pokeWakelock(5000)
11-02 15:44:51.384: INFO/ActivityManager(52): Affiche l'activité org.eddiem.adeveloper.filesendl7/.FileSendL7Activity: 239793 ms (total 255760 ms)
11-02 15:44:51.394: INFO/ARMAssembler(52): généré scanline__00000077:03545404_00000A04_00000000 [ 29 ipp] (51 ins) à [0x46ac60:0x46ad2c] dans 757079 ns
11-02 15:44:51.414: INFO/ARMAssembler(52): généré scanline__00000177:03515104_00001A01_00000000 [ 73 ipp] (98 ins) à [0x46ad30:0x46aeb8] dans 657626 ns
11-02 15:45:05.884: DEBUG/FileSendL7Activity(202): plein de fichier chemin d'accès est: /sdcard/testFile.txt
11-02 15:45:22.484: ERREUR/FileSendL7Activity(202): fOS-FileNotFoundException
11-02 15:45:22.484: ERREUR/FileSendL7Activity(202): java.io.FileNotFoundException: /sdcard/testFile.txt
11-02 15:45:22.484: ERREUR/FileSendL7Activity(202): au org.apache.l'harmonie.luni.la plate-forme.OSFileSystem.ouvert(OSFileSystem.java:244)
11-02 15:45:22.484: ERREUR/FileSendL7Activity(202): à java.io.FileOutputStream.(FileOutputStream.java:97)
11-02 15:45:22.484: ERREUR/FileSendL7Activity(202): à java.io.FileOutputStream.(FileOutputStream.java:168)
11-02 15:45:22.484: ERREUR/FileSendL7Activity(202): à java.io.FileOutputStream.(FileOutputStream.java:147)
11-02 15:45:22.484: ERREUR/FileSendL7Activity(202): org.eddiem.adeveloper.filesendl7.FileSendL7Activity.creatExternalStorageFileOS(FileSendL7Activity.java:149)
11-02 15:45:22.484: ERREUR/FileSendL7Activity(202): au org.eddiem.adeveloper.filesendl7.FileSendL7Activity.l'accès$0(FileSendL7Activity.java:124)
11-02 15:45:22.484: ERREUR/FileSendL7Activity(202): au org.eddiem.adeveloper.filesendl7.FileSendL7Activity$1.onClick(FileSendL7Activity.java:176)
11-02 15:45:22.484: ERREUR/FileSendL7Activity(202): au android.vue.Vue.performClick(point de Vue.java:2364)

>

Grâce

Quel appareil vous tester sur?
Quelle est la ligne qui est à l'origine de l'exception? Pouvez-vous nous?
Désolé pour l'oubli. Je suis en train de tester cela sur l'émulateur à partir de l'Éclipse et la version est Android 2.1, l'API Level 7. La ligne qui échoue est: fOS = new FileOutputStream(fichier);
J'ai aussi essayé d'utiliser la BufferedWrite au lieu de la FileOutputStream, mais toujours obtenir le même problème (fichier introuvable). C'est pourtant à l'aide de la voir mon test des fichiers répertoriés dans le DDMS FileExplore outil. J'ai aussi essayé l'exécution de ce test de l'application sur mon téléphone, l'exécution de Android_2.3.3, sans succès. Je commence à penser qu'il ya quelque chose de mal avec l'accumulation dans Eclipse. Plus les pensées seraient grandement appréciés.

OriginalL'auteur Eddie Moxey | 2011-11-01