Autore Topic: Scrivere su file, non crea il nuovo file  (Letto 440 volte)

Offline Domenico Longo

  • Nuovo arrivato
  • *
  • Post: 2
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    umi touch
  • Sistema operativo:
    android 6.0
Scrivere su file, non crea il nuovo file
« il: 28 Agosto 2016, 12:23:43 CEST »
0
Ciao ragazzi sono nuovo del mondo android, ieri mi sono interfacciato per la prima volta con la scrittura di dati persistenti mediante l'utilizzo di file di testo .dat. vi spiego la situazione:
ho creato una classe che si occupa della gestione della lettura e scrittura su file, quello che fa è controlla se il file già esiste, se non esiste allora lo crea con dei valori di defoult e poi passa la lista creata come risultato, altrimenti legge il file esistente e restituisce la lista degli elementi letti, testata su eclipse con java tutto ok scrive salva e carica correttamente, spostata in android studio mi da una ioexception e non crea affatto il file.
di seguito posto la classe:

public class FileHelper {
    private Preventivo materialiDisponibili = new Preventivo();
    File f = new File("materiali.dat");



    public Preventivo getMaterialiDisponibili() throws IOException, ClassNotFoundException {
        if (f.exists()) {
            materialiDisponibili = leggiFile(f.getPath());
        }else{
            f.createNewFile();
            materialiDisponibili = scriviFile(f.getPath());
        }

        return materialiDisponibili;
    }

    public Preventivo scriviFile(String filePath) throws IOException {
        Preventivo materialiDisponibili = new Preventivo();
        FileOutputStream outFile = new FileOutputStream(filePath);
        ObjectOutputStream outStream = new ObjectOutputStream(outFile);
        Material m;
        m = new Material("Tubo corrugato sotto traccia diam. 16-20-25","m",3,0.04f);
        materialiDisponibili.addMaterial(m);
        m = new Material("Tubo corrugato sotto traccia diam. 32-40","m",3,0.04f);
        materialiDisponibili.addMaterial(m);
        m = new Material("Tubo corrugato sotto traccia diam. 50-63","m",3,0.04f);
        materialiDisponibili.addMaterial(m);
        m = new Material("Tubo corrugato interrato diam. 50-63-110-150","m",3,0.04f);
        materialiDisponibili.addMaterial(m);
        m = new Material("Tubo corrugato interrato diam. 200 ed oltre","m",3,0.04f);
        materialiDisponibili.addMaterial(m);
        m = new Material("Tubo corrugato posato a vista diam. 16-20-25","m",3,0.04f);
        materialiDisponibili.addMaterial(m);
        m = new Material("Tubo corrugato posato a vista diam. 25","m",3,0.04f);
        materialiDisponibili.addMaterial(m);
        m = new Material("Tubo corrugato posato a vista diam. 110","m",3,0.04f);
        materialiDisponibili.addMaterial(m);
        m = new Material("Tubo rigido sotto traccia diam. 16-20-25-32","m",3,0.04f);
        materialiDisponibili.addMaterial(m);
        m = new Material("Tubo rigido sotto traccia diam. 40-50-63","m",3,0.04f);
        materialiDisponibili.addMaterial(m);
        outStream.close();
        outStream.writeObject(materialiDisponibili);
        return materialiDisponibili;

    }

    public static Preventivo leggiFile(String filePath) throws IOException, ClassNotFoundException{
        Preventivo p = new Preventivo();
        FileInputStream inFile = new FileInputStream(filePath);
        ObjectInputStream inStream = new ObjectInputStream(inFile);
        p = (Preventivo)inStream.readObject();
        inStream.close();
        return p;
    }
}


non sono molto esperto di forum perciò non so se l'oggetto o la categoria siano corretti, in ogni caso grazie mille per l'aiuto .
ho fatto un paio di debug e si blocca all'istruzione f.createNewFile();
« Ultima modifica: 28 Agosto 2016, 14:16:20 CEST da Domenico Longo »

Offline kiry32

  • Nuovo arrivato
  • *
  • Post: 14
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    s3
  • Sistema operativo:
    ubuntu 16.04
Re:Scrivere su file, non crea il nuovo file
« Risposta #1 il: 28 Agosto 2016, 14:40:43 CEST »
0
Se ci condividi anche il file di log!!!

Offline Domenico Longo

  • Nuovo arrivato
  • *
  • Post: 2
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    umi touch
  • Sistema operativo:
    android 6.0
Re:Scrivere su file, non crea il nuovo file
« Risposta #2 il: 28 Agosto 2016, 16:04:30 CEST »
+1
dopo lunghi e penosi affanni ci sono riuscito, il problema era in questa istruzzione:
File f = new File("materiali.dat");
va sostituita con questa:
File f = new File(context.getFilesDir(),"materialiDisponibili.dat");

il motivo non lo so bene...perche sembra come se il primo argomento sia il path della directory in cui va a salvare il file, ma in java basterebbe scrivere il nome e lui lo salva della directory del programma....vabè comunque ora funziona tutto perfettamente scusate per la perdita di temo ;)

Offline tonno16

  • Utente storico
  • *****
  • Post: 1169
  • Respect: +56
    • Mostra profilo
  • Dispositivo Android:
    moto g
  • Play Store ID:
    Diego Tonini
  • Sistema operativo:
    OpenSuse
Re:Scrivere su file, non crea il nuovo file
« Risposta #3 il: 28 Agosto 2016, 21:24:11 CEST »
0
Su PC funziona. Su android non puoi salvare dove vuoi infatti

Offline wlf

  • Utente normale
  • ***
  • Post: 315
  • Respect: +8
    • Mostra profilo
  • Dispositivo Android:
    Xperia
Re:Scrivere su file, non crea il nuovo file
« Risposta #4 il: 29 Agosto 2016, 16:32:18 CEST »
0
Su android non puoi salvare dove vuoi infatti

Puoi salvare nella cartella della tua App, puoi scrivere in Download, ma se vuoi scrivere sulla microSD sono già dolori, serve un dispositivo rootato ... :(
Se non ricordo male anche le diverse versioni Android hanno comportamenti differenti ... :(

Online Ohmnibus

  • Utente senior
  • ****
  • Post: 582
  • Respect: +130
    • Google+
    • @ohmnibus
    • Mostra profilo
    • Lords of Knowledge GdR
  • Dispositivo Android:
    Samsung Galaxy Nexus
  • Play Store ID:
    Ohmnibus
  • Sistema operativo:
    Windows 7 x64
Re:Scrivere su file, non crea il nuovo file
« Risposta #5 il: 30 Agosto 2016, 10:13:11 CEST »
0
Citazione
ma se vuoi scrivere sulla microSD sono già dolori, serve un dispositivo rootato

Da lollipop in poi è possibile, ma l'utente deve autorizzare l'accesso alla singola cartella: https://metactrl.com/docs/sdcard-on-lollipop/
Ohmnibus
Le mie app su Play Store

È stata trovata una soluzione al tuo problema? Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato.