web-dev-qa-db-fra.com

Comment écrire un fichier texte Java

Le code suivant ne produit pas de fichier (je ne le vois nulle part) . Qu'est-ce qui manque?

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();
}
59
William Falcon

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

En gros, lorsque vous pensez que le fichier est écrit et que le fichier est réellement écrit, ne sont pas égaux (hmmm, je devrais peut-être écrire une instruction 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 souhaitez ajouter le texte au fichier, procédez comme suit:

writer = new BufferedWriter(new FileWriter(logFile, true));
114
MadProgrammer

J'aimerais 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 nouvelle 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 bloc de texte indésirable dans la plupart des cas . Le caractère de nouvelle ligne peut dépendre de la plate-forme, il est donc préférable d’obtenir ce caractère à partir des propriétés du système Java à l'aide de

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

puis en utilisant la variable newline au lieu de "\ n". Cela vous donnera la sortie comme vous le souhaitez.

16
Menezes Sousa

En Java 7 peut maintenant faire

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

et w.close sera fait automatiquement

14
guest

Il ne s'agit pas de créer un fichier car vous ne l'avez jamais créé. Vous avez fait un objet pour cela. Créer 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
smorce

Cela fonctionne avec moi. Assurez-vous que vous ajoutez ".txt" à côté de timeLog. Je l'ai utilisé dans un programme simple ouvert avec Netbeans et il écrit le programme dans le dossier principal (où se trouvent les dossiers constructeur et src).

0
Giulio Dalicco

Utilisation de Java 8 LocalDateTime et de l'instruction try-with Java 7:

public class WriteFile {

    public static void main(String[] args) {

        String timeLog = DateTimeFormatter.ofPattern("yyyyMMdd_HHmmss").format(LocalDateTime.now());
        File logFile = new File(timeLog);

        try (BufferedWriter bw = new BufferedWriter(new FileWriter(logFile))) 
        {
            System.out.println("File was written to: "  + logFile.getCanonicalPath());
            bw.write("Hello world!");
        } 
        catch (IOException e) 
        {
            e.printStackTrace();
        }
    }
}
0
xtra

Vous pouvez essayer une bibliothèque Java. FileUtils , Il a beaucoup de fonctions qui écrivent dans les fichiers. 

0
Snow