Pagina 2 di 2 primaprima 1 2
Visualizzazione dei risultati da 11 a 20 su 20
  1. #11
    bhe volente o nolente per me lo sei quasi diventato.
    mi aiuti praticamente in tutto!!
    vedo un pò che riesco a fare!
    intanto grazie mille!

  2. #12
    ho aggiustato come mi hai detto (o come ho capito io che mi hai detto) e fatto una valanga di altre prove.
    ma nada.
    che cacchio mi manca?
    codice:
    JFileChooser fc = new JFileChooser();
            FileFilter csv = new FileNameExtensionFilter("File CSV", "csv");
            FileFilter txt = new FileNameExtensionFilter("File TXT", "txt");
            fc.addChoosableFileFilter(csv);
            fc.addChoosableFileFilter(txt);
            int returnVal = fc.showSaveDialog(this);
            if (returnVal == JFileChooser.APPROVE_OPTION) {
                File f = fc.getSelectedFile();
                if (selectedfilter == txt) {
                    selectedfilter = fc.getFileFilter();
                    f.getName().endsWith(".txt");
                }
                if (selectedfilter == csv) {
                    selectedfilter = fc.getFileFilter();
                    f.getName().endsWith(".csv");
                }
                try {
                    FileWriter file = new FileWriter(f, true);
                    PrintWriter out = new PrintWriter(file);
                    out.println(jTextArea1.getText());
                    out.close();
                } catch (IOException e) {
                    System.out.println(e.getMessage());
                }
            }

  3. #13
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da fermat
    codice:
    if (selectedfilter == txt) {
                    selectedfilter = fc.getFileFilter();
                    f.getName().endsWith(".txt");
                }
    Lo descrivo per il txt ma per il csv è uguale.

    1) Il getFileFilter() devi farlo prima di fare gli if per testare quale dei filtri è ... altrimenti che senso ha?

    2) Di per sé una istruzione
    f.getName().endsWith(".txt");
    non serve assolutamente a niente come l'hai scritta. endsWith() restituisce un boolean che tu non stai appunto usando.

    Il concetto è che quando l'utente ha approvato (showSaveDialog esce e lo status è APPROVE_OPTION), tu dovresti fare:

    a) Leggo il java.io.File selezionato
    b) Leggo il filtro selezionato
    ---poi per ogni caso di filtro---
    c) Se è il filtro xyz allora:
    ...c1) Se il nome file NON termina con .xyz allora:
    ......c2) Aggiungi .xyz al nome file
    -----------------------
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  4. #14
    questo così sembra funzionare:
    codice:
    JFileChooser fc = new JFileChooser();
            FileFilter csv = new FileNameExtensionFilter("File CSV", "csv");
            FileFilter txt = new FileNameExtensionFilter("File TXT", "txt");
            fc.addChoosableFileFilter(csv);
            fc.addChoosableFileFilter(txt);
            int returnVal = fc.showSaveDialog(this);
            if (returnVal == JFileChooser.APPROVE_OPTION) {
                File f = fc.getSelectedFile();
                FileFilter selectedFilter = fc.getFileFilter();
                if (selectedFilter == txt) {
                    try {
                        FileWriter file = new FileWriter(f.getAbsolutePath() + ".txt", true);
                        PrintWriter out = new PrintWriter(file);
                        out.println(jTextArea1.getText());
                        out.close();
                    } catch (IOException e) {
                        System.out.println(e.getMessage());
                    }
                }
                if (selectedFilter == csv) {
                    try {
                        FileWriter file = new FileWriter(f.getAbsolutePath() + ".csv", true);
                        PrintWriter out = new PrintWriter(file);
                        out.println(jTextArea1.getText());
                        out.close();
                    } catch (IOException e) {
                        System.out.println(e.getMessage());
                    }
                }
    
            }
    a parte tutte le migliorie che penso che dovrei apportare (?), per fargli vedere che è gia stata scritta l'estensione posso usare endswith?

  5. #15
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da fermat
    codice:
    ....
            if (returnVal == JFileChooser.APPROVE_OPTION) {
                File f = fc.getSelectedFile();
                FileFilter selectedFilter = fc.getFileFilter();
                if (selectedFilter == txt) {
                    try {
                        FileWriter file = new FileWriter(f.getAbsolutePath() + ".txt", true);
                        PrintWriter out = new PrintWriter(file);
                        out.println(jTextArea1.getText());
                        out.close();
                    } catch (IOException e) {
                        System.out.println(e.getMessage());
                    }
                }
                if (selectedFilter == csv) {
                    try {
                        FileWriter file = new FileWriter(f.getAbsolutePath() + ".csv", true);
                        PrintWriter out = new PrintWriter(file);
                        out.println(jTextArea1.getText());
                        out.close();
                    } catch (IOException e) {
                        System.out.println(e.getMessage());
                    }
                }
    
            }
    a parte tutte le migliorie che penso che dovrei apportare (?), per fargli vedere che è gia stata scritta l'estensione posso usare endswith?
    Sì, così ha già più senso. Salvo 2 cose:

    1) Aggiungi sempre in modo indiscriminato la estensione. Se l'utente ha già scelto pippo.txt lo fai diventare pippo.txt.txt, il che personalmente lo troverei un tantino irritante. Diversi messaggi fa avevo chiaramente mostrato le tre logiche (almeno quelle sensate che mi vengono in mente) per gestire il completamento con la estensione.

    Le due più semplici sono:
    a) Aggiungi .xyz solo se non c'è alcuna estensione
    oppure
    b) Aggiungi .xyz solo se non finisce per .xyz

    Chiaramente presuppone un test "se c'è qualcosa", che devi fare tu. Se vuoi sapere se esiste una estensione (qualunque), basta cercare con indexOf() il punto nel solo nome base (senza path).
    Se vuoi sapere se c'è quella estensione specifica usi endsWith() e se vuoi che sia indifferente al case, prima passi il nome in lowercase.

    2) Fai comunque 2 volte la gestione dell'I/O. Anche se è il minore dei problemi, cerca perlomeno di evitarlo (magari incapsulando la logica di scrittura in un metodo).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  6. #16
    ho fatto una cosa del genere:
    codice:
    JFileChooser fc = new JFileChooser();
            FileFilter csv = new FileNameExtensionFilter("File CSV", "csv");
            FileFilter txt = new FileNameExtensionFilter("File TXT", "txt");
            fc.addChoosableFileFilter(csv);
            fc.addChoosableFileFilter(txt);
            int returnVal = fc.showSaveDialog(this);
            if (returnVal == JFileChooser.APPROVE_OPTION) {
                File f = fc.getSelectedFile();
                FileFilter selectedFilter = fc.getFileFilter();
                if (selectedFilter == txt) {
                    if (fc.getName().endsWith(".txt") || fc.getName().endsWith(".csv")) {
                        SalvataggioFile.NoExt();
                    } else {
                        SalvataggioFile.Txt();
                    }
                }
                if (selectedFilter == csv) {
                    if (fc.getName().endsWith(".csv") || fc.getName().endsWith(".csv")) {
                        SalvataggioFile.NoExt();
                    } else {
                        SalvataggioFile.Csv();
                    }
                }
            }
    codice:
    public class SalvataggioFile {
    
        public static boolean NoExt() {
            try {
                FileWriter file = new FileWriter(Banca.f, true);
                PrintWriter out = new PrintWriter(file);
                out.println(Banca.jTextArea1.getText());
                out.close();
                return true;
            } catch (IOException e) {
                System.out.println(e.getMessage());
                return false;
            }
        }
    
        public static boolean Txt() {
            try {
                FileWriter file = new FileWriter(Banca.f.getAbsolutePath() + ".txt", true);
                PrintWriter out = new PrintWriter(file);
                out.println(Banca.jTextArea1.getText());
                out.close();
                return true;
            } catch (IOException e) {
                System.out.println(e.getMessage());
                return false;
            }
        }
    
        public static boolean Csv() {
            try {
                FileWriter file = new FileWriter(Banca.f.getAbsolutePath() + ".csv", true);
                PrintWriter out = new PrintWriter(file);
                out.println(Banca.jTextArea1.getText());
                out.close();
                return true;
            } catch (IOException e) {
                System.out.println(e.getMessage());
                return false;
            }
        }
    }
    però ho questi errori in fase di esecuzione:
    codice:
    Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
            at banca.Banca.jMenuItem2ActionPerformed(Banca.java:384)
            at banca.Banca.access$400(Banca.java:22)
            at banca.Banca$5.actionPerformed(Banca.java:279)
            at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
            at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
            at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
            at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
            at javax.swing.AbstractButton.doClick(AbstractButton.java:357)
            at javax.swing.plaf.basic.BasicMenuItemUI.doClick(BasicMenuItemUI.java:1223)
            at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(BasicMenuItemUI.java:1264)
            at java.awt.Component.processMouseEvent(Component.java:6263)
            at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
            at java.awt.Component.processEvent(Component.java:6028)
            at java.awt.Container.processEvent(Container.java:2041)
            at java.awt.Component.dispatchEventImpl(Component.java:4630)
            at java.awt.Container.dispatchEventImpl(Container.java:2099)
            at java.awt.Component.dispatchEvent(Component.java:4460)
            at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4574)
            at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
            at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
            at java.awt.Container.dispatchEventImpl(Container.java:2085)
            at java.awt.Window.dispatchEventImpl(Window.java:2478)
            at java.awt.Component.dispatchEvent(Component.java:4460)
            at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
            at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
            at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
            at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
            at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
            at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
            at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
    ???

  7. #17
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da fermat
    codice:
                    if (fc.getName().endsWith(".txt") || fc.getName().endsWith(".csv")) {
                        SalvataggioFile.NoExt();
                    } else {
                        SalvataggioFile.Txt();
                    }
                }
                if (selectedFilter == csv) {
                    if (fc.getName().endsWith(".csv") || fc.getName().endsWith(".csv")) {
                        SalvataggioFile.NoExt();
                    } else {
                        SalvataggioFile.Csv();
                    }
                }
    Ma perché devi complicarti la vita con questi test?? (tra l'altro nel secondo testi 2 volte .csv)

    Originariamente inviato da fermat
    codice:
    public class SalvataggioFile {
    
        public static boolean NoExt() {
            try {
                FileWriter file = new FileWriter(Banca.f, true);
                PrintWriter out = new PrintWriter(file);
                out.println(Banca.jTextArea1.getText());
                out.close();
                return true;
            } catch (IOException e) {
                System.out.println(e.getMessage());
                return false;
            }
        }
    
        public static boolean Txt() {
            try {
                FileWriter file = new FileWriter(Banca.f.getAbsolutePath() + ".txt", true);
                PrintWriter out = new PrintWriter(file);
                out.println(Banca.jTextArea1.getText());
                out.close();
                return true;
            } catch (IOException e) {
                System.out.println(e.getMessage());
                return false;
            }
        }
    
        public static boolean Csv() {
            try {
                FileWriter file = new FileWriter(Banca.f.getAbsolutePath() + ".csv", true);
                PrintWriter out = new PrintWriter(file);
                out.println(Banca.jTextArea1.getText());
                out.close();
                return true;
            } catch (IOException e) {
                System.out.println(e.getMessage());
                return false;
            }
        }
    }
    Come si dice ... dalla padella alla brace. Ora non hai 2 pezzi di codice praticamente duplicato .... ne hai ben 3!!

    Originariamente inviato da fermat
    però ho questi errori in fase di esecuzione:
    [code]Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    Nella parte dove gestisci l'approvazione hai messo una variabile locale:

    File f = fc.getSelectedFile();

    Poi nella parte di salvataggio, in tutt'altra parte, vai ad usare un campo Banca.f

    Questo "f" di Banca è di certo un campo statico ma non è quel File f locale che hai dichiarato. Quindi il campo Banca.f presumo resti a null, quindi da ciò il NullPointerException.

    E comunque andare ad accedere al nome del file in questo modo è inappropriato, un "design" sbagliato. E idem per Banca.jTextArea1.

    Ripeto: è sbagliato.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  8. #18
    si lo so ma era l'unico modo che mi veniva in mente per nn scrivere tutto questo (che funziona ma nn è granchè come codice):
    codice:
     JFileChooser fc = new JFileChooser();
            FileFilter csv = new FileNameExtensionFilter("File CSV", "csv");
            FileFilter txt = new FileNameExtensionFilter("File TXT", "txt");
            fc.addChoosableFileFilter(csv);
            fc.addChoosableFileFilter(txt);
            int returnVal = fc.showSaveDialog(this);
            if (returnVal == JFileChooser.APPROVE_OPTION) {
                File f = fc.getSelectedFile();
                FileFilter selectedFilter = fc.getFileFilter();
                if (selectedFilter == txt) {
                    if (f.getName().endsWith(".txt") || f.getName().endsWith(".csv")) {
                        try {
                            FileWriter file = new FileWriter(f, true);
                            PrintWriter out = new PrintWriter(file);
                            out.println(jTextArea1.getText());
                            out.close();
                        } catch (IOException e) {
                            System.out.println(e.getMessage());
                        }
                    } else {
                        try {
                            FileWriter file = new FileWriter(f.getAbsolutePath() + ".txt", true);
                            PrintWriter out = new PrintWriter(file);
                            out.println(jTextArea1.getText());
                            out.close();
                        } catch (IOException e) {
                            System.out.println(e.getMessage());
                        }
                    }
                }
                if (selectedFilter == csv) {
                    if (f.getName().endsWith(".txt") || f.getName().endsWith(".csv")) {
                        try {
                            FileWriter file = new FileWriter(f, true);
                            PrintWriter out = new PrintWriter(file);
                            out.println(jTextArea1.getText());
                            out.close();
                        } catch (IOException e) {
                            System.out.println(e.getMessage());
                        }
                    } else {
                        try {
                            FileWriter file = new FileWriter(f.getAbsolutePath() + ".csv", true);
                            PrintWriter out = new PrintWriter(file);
                            out.println(jTextArea1.getText());
                            out.close();
                        } catch (IOException e) {
                            System.out.println(e.getMessage());
                        }
                    }
                }
            }

  9. #19
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    codice:
    private void salvaFile() {
        JFileChooser fc = new JFileChooser();
        FileFilter csvFilter = new FileNameExtensionFilter("File CSV", "csv");
        FileFilter txtFilter = new FileNameExtensionFilter("File TXT", "txt");
        fc.addChoosableFileFilter(csvFilter);
        fc.addChoosableFileFilter(txtFilter);
        int returnVal = fc.showSaveDialog(this);
        
        if (returnVal == JFileChooser.APPROVE_OPTION) {
            File f = fc.getSelectedFile();
            FileFilter selectedFilter = fc.getFileFilter();
    
            if (f.getName().indexOf('.') == -1) {
                // Se il nome NON ha estensione, allora ...
                
                if (selectedFilter == csvFilter) {
                    // Completa con .csv
                    f = new File(f.getPath() + ".csv");
                } else if (selectedFilter == txtFilter) {
                    // Completa con .txt
                    f = new File(f.getPath() + ".txt);
                }
            }
    
            try {
                FileWriter file = new FileWriter(f, true);
                PrintWriter out = new PrintWriter(file);
                out.println(jTextArea1.getText());
                out.close();
            } catch (IOException e) {
                JOptionPane.showMessageDialog(this, e, "ERRORE", JOptionPane.ERROR_MESSAGE);
            }
        }
    }
    Non l'ho provato ma mi sembra ok. E perlomeno non ci sono duplicazioni grossolane. Si potrebbe ancora migliorare, chiaramente.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  10. #20
    si si funziona.
    grazie mille per la pazienza.
    adesso vedo di cercare di apportare altri miglioramenti.
    ho deciso di studiarmi bene alcuni libri perchè ho visto che cmq la roba è veramente tanta.
    grazie ancora!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.