Sauvegarder un fichier en interne

rapidegoyes Messages postés 93 Date d'inscription samedi 22 février 2020 Statut Membre Dernière intervention 23 décembre 2024 - 23 déc. 2024 à 22:13

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

A voir également: