Comment écrire un fichier texte Java

Le code suivant Ne produit pas de fichier (je ne peux pas voir le fichier n'importe où). Ce qui est absent?

try {
    //create a temporary file
    String timeLog = new SimpleDateFormat("yyyyMMdd_HHmmss").format(
        Calendar.getInstance().getTime());
    File logFile=new File(timeLog);

    BufferedWriter writer = new BufferedWriter(new FileWriter(logFile));
    writer.write (string);

    //Close writer
    writer.close();
} catch(Exception e) {
    e.printStackTrace();
}
54
demandé sur Ashish Aggarwal 2013-04-02 05:13:07

6 réponses

Je pense que vos attentes et la réalité ne correspondent pas (mais quand le font-ils jamais;))

Fondamentalement, où vous pensez que le fichier est écrit et où le fichier est réellement écrit ne sont pas égaux (hmmm, peut - être que je devrais écrire une déclaration if;))

public class TestWriteFile {

    public static void main(String[] args) {
        BufferedWriter writer = null;
        try {
            //create a temporary file
            String timeLog = new SimpleDateFormat("yyyyMMdd_HHmmss").format(Calendar.getInstance().getTime());
            File logFile = new File(timeLog);

            // This will output the full path where the file will be written to...
            System.out.println(logFile.getCanonicalPath());

            writer = new BufferedWriter(new FileWriter(logFile));
            writer.write("Hello world!");
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                // Close the writer regardless of what happens...
                writer.close();
            } catch (Exception e) {
            }
        }
    }
}

Notez également que votre exemple écrasera tous les fichiers existants. Si vous voulez ajouter le texte au fichier, vous devez faire ce qui suit à la place:

writer = new BufferedWriter(new FileWriter(logFile, true));
107
répondu MadProgrammer 2016-05-14 03:24:38

Je voudrais ajouter un peu plus à la réponse de MadProgrammer.

En cas d'écriture de plusieurs lignes, lors de l'exécution de la commande

writer.write(string);

On peut remarquer que les caractères de saut de ligne sont omis ou ignorés dans le fichier écrit même s'ils apparaissent pendant le débogage ou si le même texte est imprimé sur le terminal avec,

System.out.println("\n");

Ainsi, le texte entier se présente comme un gros morceau de texte qui n'est pas souhaitable dans la plupart des cas. Le caractère de retour à la ligne peut dépendre plate-forme, il est donc préférable d'obtenir ce caractère à partir des propriétés du système java en utilisant

String newline = System.getProperty("line.separator");

Et ensuite en utilisant la variable newline au lieu de "\n". Cela obtiendra la sortie comme vous le souhaitez.

16
répondu Menezes Sousa 2013-12-04 09:47:59

En java 7 peut maintenant faire

try(BufferedWriter w = ....)
{
  w.write(...);
}
catch(IOException)
{
}

Et W. close se fera automatiquement

14
répondu guest 2014-04-06 19:54:54

Il ne crée pas de fichier car vous n'avez jamais créé le fichier. Tu as fait un objet pour ça. La création d'une instance ne crée pas le fichier.

File newFile = new File("directory", "fileName.txt");

Vous pouvez le faire pour créer un fichier:

newFile.createNewFile();

Vous pouvez le faire pour créer un dossier:

newFile.mkdir();
4
répondu smorce 2015-05-09 22:07:53

Vous pouvez essayer une bibliothèque Java. FileUtils , il a de nombreuses fonctions qui écrivent dans des fichiers.

0
répondu Snow 2014-10-13 05:39:32

Ça marche avec moi. Assurez-vous que vous ajoutez ".txt" à côté de logtemps. Je l'ai utilisé dans un programme simple ouvert avec Netbeans et il écrit le programme dans le dossier principal (où les dossiers builder et src sont).

0
répondu Giulio Dalicco 2017-05-22 17:27:49