Retour chariot \ Java en ligne vierge
-
26-09-2019 - |
Question
J'ai créé un fichier texte dans un environnement Unix en utilisant le code Java.
Pour écrire le fichier texte que je utilise java.io.FileWriter
et BufferedWriter
. Et pour chaque ligne nouvelle ligne après que je suis en utilisant la méthode bw.newLine()
(où bw
est objet de BufferedWriter
).
Je vous envoie ce fichier texte en attachant dans le courrier de l'environnement Unix lui-même (automatisé en utilisant les commandes Unix).
Ma question est, après avoir téléchargé le fichier texte du courrier dans un système Windows, si je
ouvert ce fichier texte les données ne sont pas correctement alignés. caractère newline()
est
ne fonctionne pas, je pense.
Je veux même alignement de fichier texte tel qu'il est dans un environnement Unix, si j'ouvert la fichier texte dans un environnement Windows également.
Comment puis-je résoudre le problème?
code Java ci-dessous pour votre référence (en cours d'exécution 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();
}
La solution
Java ne connaît la plate-forme, il est en cours d'exécution, donc il ne peut vous donner une sortie en fonction de la plate-forme sur cette plate-forme (en utilisant bw.newLine()
). Le fait que vous l'ouvrir sur un moyen de système de fenêtres que vous avez soit pour convertir le fichier avant de l'utiliser (en utilisant quelque chose que vous avez écrit, ou en utilisant un programme comme
Autres conseils
La newLine()
méthode assure une nouvelle ligne de plate-forme compatible est ajouté (0Dh 0Ah
pour DOS, 0Dh
pour les anciens Mac, 0Ah
pour Unix / Linux). Java n'a aucun moyen de savoir sur quelle plate-forme que vous allez envoyer le texte. Cette conversion doit être pris en charge par l'envoi de courrier des entités.
Je ne sais pas qui regarde votre dossier, mais si vous l'ouvrez dans WordPad au lieu de bloc-notes, les sauts de ligne affichera correcte. Si vous utilisez une extension de fichier spécial, l'associer à WordPad et vous avez terminé avec elle. Ou utiliser un autre éditeur de texte plus avancé.
bw.newLine();
ne peut pas assurer la compatibilité avec tous les systèmes.
Si vous êtes sûr qu'il va être ouvert dans les fenêtres, vous pouvez formater aux fenêtres newline.
Si vous utilisez déjà des commandes unix natives, essayez unix2dos
et convertir Teh fichier déjà généré au format Windows, puis envoyer le courrier.
Si vous n'utilisez les commandes unix et préfèrent le faire en java, utilisez `` bw.write ( « \ r \ n ») `et si elle ne complique pas votre programme, ont une méthode qui découvre l'exploitation système et écrit le saut de ligne approprié.
Si je vous comprends bien, nous parlons d'une pièce jointe de fichier texte.
Cest dommage parce que si elle était le corps de message de l'e-mail, vous pouvez toujours utiliser « \ r \ n », se référant à
b) fournir deux fichiers joints, l'un avec le format linux et un avec le format Windows. c) Je ne sais pas si la pièce jointe doit être lu par des personnes ou des machines, mais si ce sont les gens que je considère attacher un fichier HTML au lieu de texte brut. plus et plus joli portable, trop:)
Encapsulate votre écrivain pour fournir le remplacement char, comme ceci:
public class WindowsFileWriter extends Writer {
private Writer writer;
public WindowsFileWriter(File file) throws IOException {
try {
writer = new OutputStreamWriter(new FileOutputStream(file), "ISO-8859-15");
} catch (UnsupportedEncodingException e) {
writer = new FileWriter(logfile);
}
}
@Override
public void write(char[] cbuf, int off, int len) throws IOException {
writer.write(new String(cbuf, off, len).replace("\n", "\r\n"));
}
@Override
public void flush() throws IOException {
writer.flush();
}
@Override
public void close() throws IOException {
writer.close();
}
}