8
votes

Ajoutez une extension .txt dans jfilechooser

J'ai une méthode qui reçoit du texte à partir d'une JTextarea, créez un fichier et écrivez un texte sous forme de texte sous forme de code ci-dessous: xxx pré>

et un filtre de fichier TXT p>

public class TxtFilter extends FileFilter{
    @Override
    public boolean accept(File f){
        return f.getName().toLowerCase().endsWith(".txt")||f.isDirectory();
    }
    @Override
    public String getDescription(){
        return "Text files (*.txt)";
    }
}


0 commentaires

4 Réponses :


1
votes

J'ai fait cette fonction à cet effet: xxx

alors vous pouvez utiliser la fonction par exemple de cette manière: xxx


2 commentaires

Merci mais j'ai une exception exécutée: exception dans le fil "AWT-EventQuue-0" Java.lang.nullPointereException à Provegrafica.Provaframepop.createtext (Provaframepop.java:145)


Cela ne serait pas échouer si le nom de fichier contient "".



7
votes

Mise à jour

Vous m'avez signalé que la vérification des fichiers existants ne fonctionne pas. Je suis désolé, je ne l'ai pas pensé quand je vous ai suggéré de remplacer la ligne bufferedWriter . Maintenant, remplacez ceci: xxx

avec: xxx

avec ce remplacement, il n'est pas nécessaire maintenant de remplacer le Ligne de bufferedWriter , ajout .txt pour l'extension. Ensuite, remplacez cette ligne avec la ligne dans le code que vous avez posté (avec bufferedWriter OUT = nouveau bufferedWriter (nouveau FileWriter (SFILE)); au lieu de BufferedWriter OUT = nouveau bufferedWriter (Nouveau FileWriter (SFILE + ".txt")); ).

Maintenant, le programme devrait fonctionner comme prévu.

J'ai oublié de mentionner que vous devez commenter la ligne: xxx

de cette manière, vous créez un fichier vide, avec le fichier Classe .

juste après cette ligne, il y a : BufferedWriter OUT = Nouveau bufferedWriter (nouveau FileWriter (SFILE)); . Avec cette ligne, vous créez à nouveau le même fichier. La procédure d'écriture se passe deux fois! Je pense qu'il est inutile d'insérer deux instructions qui font la même tâche.

Aussi, sur le constructeur bufferedWriter , vous pouvez ajouter une chaîne pour le nom du fichier (ce n'est pas Possible sur fichier constructeur), c'est la raison pour laquelle j'ai ajouté + ". txt" (l'extension) sur sftile < / p>


6 commentaires

Très étrange! Sur mon système, tout fonctionne ..J'ai édité la réponse.


Merci beaucoup pour vos infos utiles! Vous avez raison, j'ai écrit deux fois le fichier, il n'y a aucune raison pour cela. Maintenant, les fichiers sont correctement enregistrés avec suffixe ".txt


Il n'y a qu'une seule petite question à gauche: je peux maintenant enregistrer automatiquement avec une extension .txt, mais je n'ai pas de .txt dans le nom de description du filechooser. Cela signifie que lorsque je sauvegarder à nouveau avec un nom de fichier précédent, il ne vous invite jamais que le fichier existe déjà et écrase toujours l'exemple de fichier précédent: Supposons que je souhaite enregistrer un fichier comme nom = test: il enregistre maintenant test.txt et créez ce fichier. Si je veux enregistrer un autre fichier avec le même nom, il ne reçoit pas de fichier de test comme déjà écrit car celui enregistré est maintenant test.txt


@Albertocepsut j'ai compris. Mais vous avez remplacé la chaîne que je vous ai suggérée avec "BufferedWriter Out = nouveau BufferedWriter (nouveau FileWriter (SFILE +". TXT "));" et commentaire la ligne "sfile.creeneenewfile ();" aussi dans la boucle "autre"?


Oui, je l'ai fait, mais le problème est que, de cette façon, il n'a jamais trouvé de fichier déjà existant afin de ne jamais demander écraser.


Pas de problème, pardonnez-moi parce que je n'avais pas pensé d'abord le contrôle si le fichier existe.



18
votes

Je viens d'utiliser ce xxx


0 commentaires

4
votes

Ceci est une fonction utilitaire de l'un de mes programmes que vous pouvez utiliser au lieu de jfilechooser.getselectedfile code>, pour obtenir l'extension également.

/**
 * Returns the selected file from a JFileChooser, including the extension from
 * the file filter.
 */
public static File getSelectedFileWithExtension(JFileChooser c) {
    File file = c.getSelectedFile();
    if (c.getFileFilter() instanceof FileNameExtensionFilter) {
        String[] exts = ((FileNameExtensionFilter)c.getFileFilter()).getExtensions();
        String nameLower = file.getName().toLowerCase();
        for (String ext : exts) { // check if it already has a valid extension
            if (nameLower.endsWith('.' + ext.toLowerCase())) {
                return file; // if yes, return as-is
            }
        }
        // if not, append the first extension from the selected filter
        file = new File(file.toString() + '.' + exts[0]);
    }
    return file;
}


0 commentaires