2016-10-27 1 views
0

Je le code suivant:BufferedWriter crée un fichier vide avec rien à l'intérieur

FileSystem fs = FileSystem.get(context.getConfiguration());  
Path filePath2 = Path.mergePaths(outputPath, new Path("/SomeFile")); 
      BufferedWriter writer2 = new BufferedWriter(new OutputStreamWriter(fs.create(filePath2,true))); 
      writer2.write("Key: " + key.toString() + "\nValue: " + values.iterator().next().getSensCol().toString()); 

      writer2.close(); 

J'utilise la bibliothèque Hadoop pour certaines de ces classes. Après que je l'ai exécuté, je vois que le fichier est créé mais il n'y a rien dedans, aucune idée pourquoi cela pourrait être?

+2

Il n'est pas nécessaire de rincer car la fermeture entraînera un rinçage interne. – Loc

+0

Qu'est-ce qui est dans la variable 'fs'? – Henry

+0

FileSystem fs = FileSystem.get (context.getConfiguration()); – covfefe

Répondre

0

Il n'y a pas suffisamment d'informations pour un diagnostic correct, mais votre code semble correct ... sauf (peut-être) pour le chemin. Sur un système Linux (au moins), un utilisateur normal ne devrait pas pouvoir écrire un fichier dans le répertoire "/".

Donc, je peux suggérer quelques explications possibles:

  1. Le fichier est en cours d'écriture, mais pas dans le répertoire que vous regardez.

  2. Le fichier open échoue (ou les écritures échouent) mais votre application est écrasant l'exception ... dans du code que vous ne nous avez pas montré.


Ah! Il semble que vous utilisiez org.apache.hadoop.fs.FileSystem! (La version java.nio.file de la classe FileSystem ne dispose pas d'une méthode get.)

Je ne pense pas que cela change ma réponse, à part pour les choses d'être en mesure d'écrire dans le répertoire «/». Cela pourrait être autorisé pour un Hadoop FS.

0

Utilisez un FileWriter avec le BufferedWriter.

Path filePath2 = Path.mergePaths(outputPath, new Path("/SomeFile")); 

FileWriter fileWriter2 = null; 
BufferedWriter writer2 = null; 

try { 
    fileWriter2 = new FileWriter(filePath2.toFile()); 
    writer2 = new BufferedWriter(writer2); 

    writer2.write("Key: " + key.toString()); 

    //if you are going to use an Iterator, you better actually use it. 
    for (Iterator iterator = col.iterator() ; iterator.hasNext() ;) { 
     writer2.write("\nValue: " + iterator.next() 
      .getSensCol().toString()); 
    } 

} 
catch (IOException ex) { 
    //Exception handling 
} 
finally { 
    writer2.close(); 
    fileWriter2.close(); 
} 

J'espère avoir aidé.

Passez une bonne journée. :)