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();
}
War es hilfreich?

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.

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();
    }

}
scroll top