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!
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!
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()); } }
Lo descrivo per il txt ma per il csv è uguale.Originariamente inviato da fermat
codice:if (selectedfilter == txt) { selectedfilter = fc.getFileFilter(); f.getName().endsWith(".txt"); }
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.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
questo così sembra funzionare:
a parte tutte le migliorie che penso che dovrei apportare (?), per fargli vedere che è gia stata scritta l'estensione posso usare endswith?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()); } } }
Sì, così ha già più senso. Salvo 2 cose:Originariamente inviato da fermat
a parte tutte le migliorie che penso che dovrei apportare (?), per fargli vedere che è gia stata scritta l'estensione posso usare endswith?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()); } } }
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.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
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(); } } }però ho questi errori in fase di esecuzione: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; } } }
???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)
Ma perché devi complicarti la vita con questi test?? (tra l'altro nel secondo testi 2 volte .csv)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(); } }
Come si dice ... dalla padella alla brace. Ora non hai 2 pezzi di codice praticamente duplicato .... ne hai ben 3!!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; } } }
Nella parte dove gestisci l'approvazione hai messo una variabile locale:Originariamente inviato da fermat
però ho questi errori in fase di esecuzione:
[code]Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
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.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
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()); } } } }
Non l'ho provato ma mi sembra ok. E perlomeno non ci sono duplicazioni grossolane. Si potrebbe ancora migliorare, chiaramente.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); } } }
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
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!