Sauvegarder un fichier en interne
rapidegoyes Messages postés 138 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
J'essaye de coder une petite appli avec android studio sous java.
J'ai l'intention de sauvegarder un fichier txt en interne.
Mon code compile sans problème mais lorsque je clique sur le bouton afficherFichier mon appli plante.
Ce bouton lance la méthode lireFichier.
Ci-dessous mon code ainsi que mon fichier xml pour identifier les divers widgets.
Le fichier .xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:gravity="center_horizontal" tools:context=".RelevFragment"> <!-- TODO: Update blank fragment layout --> <TextView android:id="@+id/Titre" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="25dp" android:padding="10dp" android:textSize="25sp" android:text="@string/relev_des_tensions"/> <EditText android:id="@+id/LesTensions" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="15dp" android:hint="@string/marquer_les_tensions_s_par_es_d_une_virgule_sans_espace" android:textSize="22sp" android:minHeight="200dp" android:layout_marginHorizontal="10dp" /> <Button android:id="@+id/CreateFichier" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="5dp" android:text="@string/cr_er_le_fichier" android:textAlignment="center" android:textSize="20sp" android:paddingHorizontal="16dp" /> <Button android:id="@+id/afficherFichier" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="5dp" android:text="@string/afficher_le_fichier" android:textAlignment="center" android:textSize="20sp" android:paddingHorizontal="16dp"/> <TextView android:id="@+id/Mesreleves" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="5dp" android:padding="10dp" android:textSize="20sp" /> </LinearLayout>
Le fichier ReleveFragment.java
package com.example.essaitension1; import android.os.Bundle; import androidx.annotation.NonNull; import androidx.fragment.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import com.example.essaitension1.databinding.FragmentRelevBinding; import org.jetbrains.annotations.Nullable; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; public class RelevFragment extends Fragment { //variable globale pour binding FragmentRelevBinding binding; public String voirtensions; //variable représentant les tensions dans EditText //ci-dessous constructeur public RelevFragment() { this.voirtensions = voirtensions; } public static RelevFragment newInstance(){ RelevFragment fragment = new RelevFragment(); return fragment; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { //ci-dessous modif pour indiquer au systeme qu'il doit faire la liaison avec la classe // de liaison viewBinding binding = FragmentRelevBinding.inflate(inflater, container, false); return binding.getRoot(); } @Override public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); binding.CreateFichier.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { voirtensions= binding.LesTensions.getText().toString(); ecrireFichier("monFichier.txt", binding.LesTensions.getText().toString()); } }); //************************************************************************************ binding.afficherFichier.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { binding.LesTensions.setText(lireFichier("monFichier.txt")); } }); } //*********************************************************************************** private void ecrireFichier(String nomFichier, String voirtensions){ BufferedWriter writer = null; try { File dir = getDir("TousMesFichiers"); File newfile = new File(dir.getAbsolutePath() + File.separator + nomFichier); newfile.createNewFile(); writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(newfile))); writer.write(voirtensions); } catch (Exception e) { e.printStackTrace(); } finally { if (writer != null) { try { writer.close(); } catch (IOException e) { e.printStackTrace(); } } } } private File getDir(String tousMesFichiers) { return (null); } //************************************************************************************ private String lireFichier(String nomFichier) { File dir = getDir("ToutMesFichiers"); File newFile = new File(dir.getAbsolutePath() + File.separator + nomFichier); String voirtensions = " "; BufferedReader input = null; try { input = new BufferedReader(new InputStreamReader(new FileInputStream(newFile))); String line; StringBuffer buffer = new StringBuffer(); while ((line = input.readLine()) != null) { buffer.append(line); } voirtensions = buffer.toString(); } catch (Exception e) { e.printStackTrace(); } finally { if (input != null) { try { input.close(); } catch (IOException e) { e.printStackTrace(); } } } return voirtensions; } }
Merci et Joyeux Noël
a+++ rapidego
Windows / Firefox 133.0
- Sauvegarder un fichier en interne
- Fichier bin - Guide
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier epub ? - Guide
- Fichier rar - Guide
- Fichier .dat - Guide
5 réponses
Hello,
Que dit le logcat ? Cela devrait pouvoir t'aider je pense, et nous aussi par la même occasion
Bonjour BrunoCS,
Merci de m'avoir répondu, juste une précision il y a environ cinq ou six années j'avais codé une petite appli et le code avait bien fonctionné.
Après avoir oublié un peu android studio je me suis remis à essayer de coder.
J'ai repris cette partie de mon code pour l'utiliser dans une nouvelle appli. Depuis des choses ont changées ! j'ai voulu relancer mon appli mais avec la nouvelle version impossible de relancer mon appli
Ci-dessous l'extrait du logcat.
ViewPostImeInputStage processPointer 0 2024-12-26 17:19:26.175 11570-11570 System com.example.essaitension1 W ClassLoader referenced unknown path: /system/framework/QPerformance.jar 2024-12-26 17:19:26.179 11570-11570 BoostFramework com.example.essaitension1 E BoostFramework() : Exception_1 = java.lang.ClassNotFoundException: Didn't find class "com.qualcomm.qti.Performance" on path: DexPathList[[],nativeLibraryDirectories=[/system/lib64, /vendor/lib64]] 2024-12-26 17:19:26.179 11570-11570 BoostFramework com.example.essaitension1 V BoostFramework() : mPerf = null 2024-12-26 17:19:26.243 11570-11570 ViewRootIm...nActivity] com.example.essaitension1 D ViewPostImeInputStage processPointer 1 2024-12-26 17:19:26.244 11570-11570 InputMethodManager com.example.essaitension1 D ISS - flag : 0Pid : 11570 view : com.example.essaitension1 2024-12-26 17:19:26.574 11570-11570 ViewRootIm...nActivity] com.example.essaitension1 D MSG_RESIZED: ci=Rect(0, 96 - 0, 0) vi=Rect(0, 96 - 0, 1248) or=1 2024-12-26 17:19:39.930 11570-11570 ViewRootIm...nActivity] com.example.essaitension1 D The input has been finished in ImeInputStage. 2024-12-26 17:19:39.972 11570-11570 ViewRootIm...nActivity] com.example.essaitension1 D The input has been finished in ImeInputStage. 2024-12-26 17:19:39.998 11570-11570 ViewRootIm...nActivity] com.example.essaitension1 D MSG_RESIZED: ci=Rect(0, 96 - 0, 0) vi=Rect(0, 96 - 0, 0) or=1 2024-12-26 17:19:42.797 11570-11570 ViewRootIm...nActivity] com.example.essaitension1 D ViewPostImeInputStage processPointer 0 2024-12-26 17:19:42.930 11570-11570 ViewRootIm...nActivity] com.example.essaitension1 D ViewPostImeInputStage processPointer 1 2024-12-26 17:19:42.939 11570-11570 System.err com.example.essaitension1 W java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.io.File.getAbsolutePath()' on a null object reference 2024-12-26 17:19:42.947 11570-11570 System.err com.example.essaitension1 W at com.example.essaitension1.RelevFragment.ecrireFichier(RelevFragment.java:77) 2024-12-26 17:19:42.947 11570-11570 System.err com.example.essaitension1 W at com.example.essaitension1.RelevFragment.-$$Nest$mecrireFichier(RelevFragment.java) 2024-12-26 17:19:42.947 11570-11570 System.err com.example.essaitension1 W at com.example.essaitension1.RelevFragment$1.onClick(RelevFragment.java:61) 2024-12-26 17:19:42.947 11570-11570 System.err com.example.essaitension1 W at android.view.View.performClick(View.java:6199) 2024-12-26 17:19:42.947 11570-11570 System.err com.example.essaitension1 W at android.widget.TextView.performClick(TextView.java:11090) 2024-12-26 17:19:42.947 11570-11570 System.err com.example.essaitension1 W at com.google.android.material.button.MaterialButton.performClick(MaterialButton.java:1218) 2024-12-26 17:19:42.947 11570-11570 System.err com.example.essaitension1 W at android.view.View$PerformClick.run(View.java:23647) 2024-12-26 17:19:42.947 11570-11570 System.err com.example.essaitension1 W at android.os.Handler.handleCallback(Handler.java:751) 2024-12-26 17:19:42.947 11570-11570 System.err com.example.essaitension1 W at android.os.Handler.dispatchMessage(Handler.java:95) 2024-12-26 17:19:42.947 11570-11570 System.err com.example.essaitension1 W at android.os.Looper.loop(Looper.java:154) 2024-12-26 17:19:42.947 11570-11570 System.err com.example.essaitension1 W at android.app.ActivityThread.main(ActivityThread.java:6682) 2024-12-26 17:19:42.947 11570-11570 System.err com.example.essaitension1 W at java.lang.reflect.Method.invoke(Native Method) 2024-12-26 17:19:42.947 11570-11570 System.err com.example.essaitension1 W at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1520) 2024-12-26 17:19:42.947 11570-11570 System.err com.example.essaitension1 W at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1410) 2024-12-26 17:20:03.285 11570-11570 ViewRootIm...nActivity] com.example.essaitension1 D ViewPostImeInputStage processPointer 0 2024-12-26 17:20:03.445 11570-11570 ViewRootIm...nActivity] com.example.essaitension1 D ViewPostImeInputStage processPointer 1 2024-12-26 17:20:03.451 11570-11570 AndroidRuntime com.example.essaitension1 D Shutting down VM 2024-12-26 17:20:03.453 11570-11570 AndroidRuntime com.example.essaitension1 E FATAL EXCEPTION: main Process: com.example.essaitension1, PID: 11570 java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.io.File.getAbsolutePath()' on a null object reference at com.example.essaitension1.RelevFragment.lireFichier(RelevFragment.java:107) at com.example.essaitension1.RelevFragment.-$$Nest$mlireFichier(RelevFragment.java) at com.example.essaitension1.RelevFragment$2.onClick(RelevFragment.java:68) at android.view.View.performClick(View.java:6199) at android.widget.TextView.performClick(TextView.java:11090) at com.google.android.material.button.MaterialButton.performClick(MaterialButton.java:1218) at android.view.View$PerformClick.run(View.java:23647) at android.os.Handler.handleCallback(Handler.java:751) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6682) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1520) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1410) ---------------------------- PROCESS ENDED (11570) for package com.example.essaitension1 ----------------------------
voici la référence de Android studio installée
Android Studio Ladybug | 2024.2.1 Patch 3
Build #AI-242.23339.11.2421.12700392, built on November 22, 2024
Runtime version: 21.0.3+-12282718-b509.11 amd64
VM: OpenJDK 64-Bit Server VM by JetBrains s.r.o.
Toolkit: sun.awt.windows.WToolkit
Windows 10.0
GC: G1 Young Generation, G1 Concurrent GC, G1 Old Generation
Memory: 2048M
Cores: 4
Registry:
ide.experimental.ui=true
i18n.locale=
1) je rentre quelques caractères
2) j'appuie sur le bouton Créer le fichier là pas de problème.
3) Je clique sur le bouton Afficher le fichier .
à ce moment mon appli plante avec le message Essaitension1 s'est arrêté
Ce qui me pose des questions c'est cette traduction du logcat ci-dessous:
Tentative d'invocation de la méthode virtuelle 'java.lang.String java.io.File.getAbsolutePath()' sur une référence d'objet nulle
Merci de bien vouloir m'aider.
Cordialement a +++
rapidego
Bonsoir,
J'ai une autre traduction quand je clique sur mes deux boutons, soit l'un ou l'autre
java.io.IOException: No such file or directory
java.io.IOException : aucun fichier ou répertoire de ce type
donc je n'ai ni répertoire ni fichier
a+++ cordialement
rapidego
La gestion des fichiers a bien changé sur les dernières versions d'Android. Notamment, il faut maintenant gérer les permissions et les apps n'ont plus la possibilité d'aller lire/écrire n'importe où.
Voici la doc qui pourrait t'aider: https://developer.android.com/guide/topics/data?hl=fr
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question