55 votes

Retour chariot \ Line feed en Java

J'ai créé un fichier texte dans un environnement Unix à l'aide de code Java.

Pour écrire le fichier texte, je suis en utilisant java.io.FileWriter et BufferedWriter. Et pour le saut de ligne après chaque ligne, je suis en utilisant bw.newLine() méthode (où bw a fait l'objet d' BufferedWriter).

Et je suis d'envoi de ce fichier texte en l'attachant dans le courrier de l'environnement Unix lui-même (automatisé qu'à l'aide de commandes Unix).

Mon problème est qu'après que j'ai télécharger le fichier texte à partir de la messagerie dans un système Windows, si je l'ouverture de ce fichier texte des données n'est pas correctement aligné. newline() caractère est pas de travail, je pense que oui.

Je veux le même fichier texte alignement, car il est dans un environnement Unix, si j'ai ouvert le fichier texte dans l'environnement de Windows aussi.

Comment puis-je résoudre le problème?

Le code Java ci-dessous pour votre référence (s'exécutant dans un environnement Unix):

File f = new File(strFileGenLoc);
BufferedWriter bw = new BufferedWriter(new FileWriter(f, false));
rs = stmt.executeQuery("select * from jpdata");
while ( rs.next() ) {
    bw.write(rs.getString(1)==null? "":rs.getString(1));
    bw.newLine();
}

62voto

James B Points 1842

Java ne sait que sur la plate-forme est actuellement en cours d'exécution, il ne peut que vous donner une plate-forme de sortie dépendante sur cette plate-forme (à l'aide d' bw.newLine()) . Le fait que vous ouvrez sur un système windows signifie que vous devez convertir le fichier avant de l'utiliser (à l'aide de quelque chose que vous avez écrit, ou à l'aide d'un programme comme unix2dos), ou si vous avez de la sortie du fichier avec windows format des retours chariot dans l'origine dans votre programme Java. Donc, si vous connaissez le fichier sera toujours ouvert sur une machine windows, vous aurez à la sortie

bw.write(rs.getString(1)==null? "":rs.getString(1));
bw.write("\r\n");

Il est intéressant de noter que vous n'allez pas être en mesure de produire un fichier de l'air correct sur les deux plates-formes si c'est juste du texte brut que vous utilisez, vous pouvez envisager d'utiliser le html si c'est un email, ou xml si c'est des données. Alternativement, vous pourriez avoir besoin un certain type de client qui lit les données, puis les met en forme pour la plate-forme que le spectateur est à l'aide.

7voto

nc3b Points 6704

La méthode newLine() garantit l’ajout d’une nouvelle ligne compatible avec la plate-forme ( 0Dh 0Ah pour DOS, 0Dh pour les anciens Mac, 0Ah pour Unix / Linux). Java n'a aucun moyen de savoir sur quelle plate-forme vous allez envoyer le texte. Cette conversion devrait être prise en charge par les entités d'envoi de courrier.

4voto

Axel Points 6352

Je ne sais pas qui regarde votre fichier, mais si vous l'ouvrez dans WordPad au lieu de Bloc-notes, les sauts de ligne s'afficheront correctement. Si vous utilisez une extension de fichier spéciale, associez-la à WordPad et vous en aurez terminé. Ou utilisez n'importe quel autre éditeur de texte plus avancé.

2voto

Vaishak Suresh Points 1961

bw.newLine(); ne peut pas garantir la compatibilité avec tous les systèmes.

Si vous êtes sûr qu'il va être ouvert dans windows, vous pouvez le formater de windows saut de ligne.

Si vous utilisez déjà native des commandes unix, essayez unix2dos et de convertir de la teh déjà généré un fichier au format windows et ensuite envoyer le mail.

Si vous n'êtes pas à l'aide de commandes unix et préfèrent le faire en java, utilisez `bw.write("\r\n") , et si ce n'est pas compliquer votre programme, une méthode qui permet de déterminer le système d'exploitation et les écritures appropriées retour à la ligne.

2voto

rompetroll Points 2163

Si je vous comprends bien, on parle d'un fichier texte en pièce jointe. C'est regrettable, car si c'était le courriel du corps du message, vous pouvez toujours utiliser "\r\n", se référant à http://www.faqs.org/rfcs/rfc822.html

Mais comme c'est une pièce jointe, vous devez vivre avec système de différences. Si j'étais à votre place, j'aurais choisi une de ces options:

a) uniquement en charge les clients windows en utilisant "\r\n" comme fin de ligne.

b) fournir deux fichiers de pièce jointe, l'un avec linux format et une avec windows format.

c) je ne sais pas si la pièce jointe est pour être lu par des personnes ou des machines, mais si c'est des gens que je voudrais envisager de joindre un fichier HTML au lieu du texte brut. plus portable, et beaucoup plus joli, trop :)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X