Carriage Return \ Zeilenvorschub in Java
-
26-09-2019 - |
Frage
Ich habe eine Textdatei, in Unix-Umgebung erstellt Java-Code.
Für das Schreiben der Textdatei I java.io.FileWriter
und BufferedWriter
verwenden. Und für Newline nach jeder Zeile I bw.newLine()
Methode verwenden (wo bw
Objekt von BufferedWriter
ist).
Und ich bin, dass die Textdatei zu senden, indem sie in E-Mail von Unix-Umgebung Anbringen selbst (automatisiert, dass Unix-Befehle).
Mein Problem ist, nachdem ich lade Sie die Textdatei von E-Mail in einem Windows-System, wenn ich
geöffnet, dass die Textdatei werden die Daten nicht korrekt ausgerichtet. newline()
Charakter
nicht funktioniert, ich denke schon.
Ich mag gleiche Textdatei Ausrichtung, wie es in Unix-Umgebung ist, wenn ich die geöffnet Textdatei in Windows-Umgebung auch.
Wie löse ich das Problem?
Java-Code unten für Ihre Referenz (in Unix-Umgebung ausgeführt wird):
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();
}
Lösung
Java kennt nur über die Plattform es derzeit ausgeführt wird, so dass es nur Ihnen eine plattformabhängige Ausgabe geben kann auf dieser Plattform (mit bw.newLine()
). Die Tatsache, dass Sie es auf einem Windows-System Mittel öffnen, dass Sie entweder die Datei zu konvertieren, bevor es zu benutzen (mit etwas, das Sie geschrieben haben, oder ein Programm wie unix2dos ), oder Sie haben die Datei mit Windows-Format Zeilenumbrüchen in ihm ursprünglich in Ihrem Java-Programm ausgegeben. Also, wenn Sie die Datei wissen, wird immer auf einem Windows-Rechner geöffnet wird, werden Sie zur Ausgabe haben
bw.write(rs.getString(1)==null? "":rs.getString(1));
bw.write("\r\n");
Es ist erwähnenswert, dass Sie gehen zu können, nicht eine Datei ausgegeben, die auf beiden Plattformen korrekt aussehen wird, wenn es einfach nur Text ist, die Sie verwenden, können Sie mit HTML zu prüfen, ob es sich um eine E-Mail ist, oder xml, wenn es Daten. Alternativ können Sie auch eine Art von Client benötigt, die die Daten liest und formatiert sie dann für die Plattform, dass der Betrachter verwendet wird.
Andere Tipps
Das Verfahren newLine()
sorgt für eine Plattform-kompatible neue Zeile hinzugefügt wird (0Dh 0Ah
für DOS, 0Dh
für ältere Macs, 0Ah
für Unix / Linux). Java hat keine Möglichkeit auf, zu wissen, welche Plattform Sie den Text senden gehen. Diese Umwandlung soll von der Mail-Versand Einheiten betreut werden.
Sie wissen nicht, wer an Ihrer Datei aussieht, aber wenn man es in WordPad öffnen statt Notizblock, werden die Zeilenumbrüche richtig zeigen. Falls Sie eine spezielle Dateierweiterung verwenden, verbinden sie mit Wordpad und du bist mit ihm getan. Oder nutzen Sie andere erweiterte Text-Editor.
bw.newLine();
kann nicht die Kompatibilität mit allen Systemen.
Wenn Sie sicher, es wird in den Fenstern zu öffnen, können Sie es auf windows Newline formatieren können.
Wenn Sie bereits mit nativen Unix-Befehlen, versucht unix2dos
und konvertiert teh bereits generierte Datei Windows-Format und dann die E-Mail senden.
Wenn Sie nicht Unix-Befehle verwenden und bevorzugen es in Java zu tun, verwenden Sie `` bw.write ( „\ r \ n“) `und wenn es Ihr Programm nicht verkomplizieren, hat eine Methode, die Funde aus dem Betrieb System und schreibt die entsprechende newline.
Wenn ich Sie recht verstehe, wir über einen Textdateianhang sprechen.
Das ist bedauerlich, weil, wenn sie die E-Mail die Nachricht Körper war, konnte man immer verwenden „\ r \ n“, die sich auf
b) bietet zwei Befestigungs Dateien, ein mit Linux-Format und eine mit Windows-Format. c) Ich weiß nicht, ob die Befestigung durch Menschen oder Maschinen zu lesen ist, aber wenn es Leute ist, würde ich prüfen, eine HTML-Datei anstelle von Klartext zu befestigen. mehr tragbar und viel schöner, auch:)
Encapsulate Ihr Schreiber char Ersatz zu liefern, wie folgt aus:
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();
}
}