2012-06-16 1 views
2

valeur Ascii de la ligne suivante est 10. J'ai donc essayé cette ...Nouvelle ligne à FileOutputStream

FileOutputStream os = new FileOutputStream(f, true); 
    os.write(10); // this should get me to next line ? 
    os.write(b); // b is a byte array... 
+0

Quel est le problème, alors? – Pablo

+0

son ne fonctionne pas, le prochain lne n'est pas là à la place, il ajoute à partir du dernier caractère dans le fichier – Nil

Répondre

6

Vous devez prendre soin de gérer le séparateur de ligne multi-plateforme, ce qui peut être récupéré à bien des égards:

  • System.getProperty("line.separator")
  • System.lineSeparator() (seulement java7)
  • String.format("%n")

Ensuite, vous devez prendre soin d'utiliser un DataOutputStream enroulé autour de votre FileOutputStream, parce que vous serez autorisé à choisir beaucoup de meilleures méthodes comme

  • writeChars(String str)
  • writeBytes(String str)
  • writeUTF(String str)

de sorte que vous utiliserez le plus approprié à votre situation. Notez également que l'écriture d'un tableau d'octets directement sur le flux crée des données binaires, ce qui est quelque peu contraire à l'utilisation de nouvelles lignes (qui sont du texte à la place).

+0

Monsieur, cela je sais que si je enveloppe avec bufferedoutputstream ou Dataoutputstream, je peux facilement aller à la ligne suivante ... je voulais juste sachez que si os.write (32); // l'espace fonctionne alors pourquoi pas 10 * – Nil

+0

Quel système d'exploitation utilisez-vous? – Jack

2

Sur les fenêtres, vous devez utiliser 13 et 10 comme séparateur de ligne (CR, LF) - à savoir:

os.write(13); 
os.write(10); 

Par conséquent, si vous voulez que votre application soit plate-forme indépendante, vous devez utiliser tout ce qui est dans le propriété système line.separator comme le suggère Jack.