1
votes

Kotlin: Comment créer / ajouter un fichier (et partager)

J'ai une liste de tableaux de données dans mon application que je voudrais maintenant écrire dans un fichier (csv) et utiliser une application tierce (comme un courrier électronique) pour partager ce fichier csv. Je n'ai pas eu la chance de trouver des ressources utiles pour créer, trouver le chemin du fichier et l'ajouter à un fichier dans Kotlin. Quelqu'un en a-t-il l'expérience ou a-t-il des exemples à citer? Juste pour commencer, j'essaie d'écrire l'en-tête et de fermer le fichier pour que je puisse voir qu'il est correctement écrit.

Voici ce que j'ai pour le moment:

val HEADER = "ID, time, PSI1, PSI2, PSI3, speed1, speed2, temp1, temp2"
val filename = "export.csv"

var fileOutStream : FileOutputStream = openFileOutput(filename,Context.MODE_PRIVATE)

try {
    fileOutStream.write(HEADER.toByteArray())
    fileOutStream.close()
}catch(e: Exception){
    Log.i("TAG", e.toString())
}

Cela ne lève pas l'exception, mais je ne trouve pas le fichier dans le système de fichiers. J'utilise une tablette physique pour tester / déboguer. J'ai vérifié le dossier com .... de mon application.


0 commentaires

3 Réponses :


0
votes

openFileOutput () crée un fichier privé, probablement à l'intérieur du stockage de l'application. Ces fichiers ne sont pas consultables par défaut. Si vous souhaitez créer un fichier pouvant être consulté, vous aurez besoin de l'autorisation WRITE_EXTERNAL_STORAGE, et voudrez créer des fichiers dans un répertoire tel que celui fourni par getExternalFilesDir()


1 commentaires

Pouvez-vous montrer comment utiliser getExternalFilesDir ()? Andorid Dev dit qu'il renvoie un fichier [] avec le chemin absolu vers lequel mon application peut créer des fichiers persistants. Je ne sais pas vraiment ce qu'est File [], ni comment l'utiliser avec une autre fonction. Ou, quelle fonction utiliser une fois que j'ai appelé getExternalFilesDir ().



2
votes

Je ne trouve pas le fichier dans le système de fichiers

Utilisez l'explorateur de fichiers de l'appareil d'Android Studio et recherchez dans /data/data/.../files/ , où ... est l'ID de votre application. p >

De plus, vous pouvez écrire votre code de manière un peu plus concise car:

try {
    PrintWriter(openFileOutput(filename,Context.MODE_PRIVATE)).use {
        it.println(HEADER)
    }
} catch(e: Exception) {
    Log.e("TAG", e.toString())
}

use () fermera automatiquement le PrintWriter , et PrintWriter vous offre une API plus naturelle pour écrire du texte.


0 commentaires

2
votes

Il semble qu'il existe de nombreuses façons de créer un fichier et d'y ajouter, en fonction de la version minimale de l'API pour laquelle vous développez. J'utilise l'API Android minimum 22. Le code pour créer / ajouter un fichier est ci-dessous:

val HEADER = "DATE,NAME,AMOUNT_DUE,AMOUNT_PAID"

var filename = "export.csv"

var path = getExternalFilesDir(null)   //get file directory for this package 
                                       //(Android/data/.../files | ... is your app package)

//create fileOut object
var fileOut = File(path, filename)

//delete any file object with path and filename that already exists
fileOut.delete()

//create a new file
fileOut.createNewFile()

//append the header and a newline
fileOut.appendText(HEADER)
fileOut.appendText("\n")


/*
    write other data to file 
*/



0 commentaires