Domanda

Ho creato un file di testo in ambiente Unix utilizzando il codice Java.

Per scrivere il file di testo che sto usando java.io.FileWriter e BufferedWriter.E per a capo dopo ogni riga che sto usando bw.newLine() metodo (dove bw è oggetto di BufferedWriter).

E io sono l'invio del file di testo da allegare nella mail da Unix ambiente stesso (automatizzato che utilizza i comandi di Unix).

Il mio problema è che, dopo che ho scaricato il file di testo da mail in un sistema Windows, se ho aperto quel file di testo i dati non è allineato correttamente. newline() il carattere è non funziona, io la penso così.

Voglio stesso file di testo, l'allineamento è in ambiente Unix, se ho aperto il file di testo, in ambiente Windows, anche.

Come posso risolvere il problema?

Il codice Java di seguito per il vostro riferimento (in esecuzione in ambiente 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();
}
È stato utile?

Soluzione

Java conosce solo la piattaforma è attualmente in esecuzione, quindi è possibile dare solo una piattaforma di dipendenti in uscita su quella piattaforma (utilizzando bw.newLine()) .Il fatto che si apre su di un sistema windows, significa che è necessario per convertire il file prima di usarlo (utilizzando qualcosa che hai scritto, o utilizzando un programma come unix2dos), o se il file di output con formato windows ritorni a capo in esso originariamente in programma Java.Quindi, se si conosce il file sarà sempre aperto su una macchina windows, si dovrà uscita

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

Vale la pena notare che non si sta andando ad essere in grado di un file di output che sarà corretto su entrambe le piattaforme, se è solo un semplice testo in uso, si potrebbe voler considerare l'utilizzo di html, se si tratta di un e-mail o xml, se si tratta di dati.In alternativa, potrebbe essere necessario un qualche tipo di client che legge i dati e formatta per la piattaforma che lo spettatore è in uso.

Altri suggerimenti

Il metodo newLine() assicura una nuova linea di piattaforme compatibili viene aggiunto (0Dh 0Ah per DOS, 0Dh per vecchi Mac, 0Ah per Unix / Linux). Java ha alcun modo di sapere su quale piattaforma si sta per inviare il testo. Questa conversione dovrebbe essere curato dalla posta l'invio di entità.

Non so chi guarda il tuo file, ma se lo si apre in WordPad invece di blocco note, le interruzioni di linea mostrerà corretta. Nel caso in cui si sta utilizzando un'estensione di file speciale, associarlo con WordPad e il gioco è fatto con esso. Oppure utilizzare qualsiasi altro editor di testo più avanzato.

bw.newLine(); non può garantire la compatibilità con tutti i sistemi.

Se sei sicuro che sta per essere aperto in Windows, è possibile formattarlo alle finestre di nuova riga.

Se si sta già utilizzando comandi nativi UNIX, provare unix2dos e convertire file di Teh già generato in formato Windows e quindi inviare la posta.

Se non si utilizza i comandi UNIX e preferisce farlo in java, uso `` bw.write ( "\ r \ n") `e se non complica il vostro programma, hanno un metodo che scopre il funzionamento sistema e scrive il ritorno a capo del caso.

Se ho capito bene, si parla di un allegato di file di testo. Quello è un peccato perché se fosse corpo del messaggio della e-mail, si può sempre usare "\ r \ n", riferendosi a http://www.faqs.org/rfcs/rfc822.html

Ma come è un allegato, si deve vivere con le differenze di sistema. Se fossi nei tuoi panni, vorrei scegliere una di queste opzioni:

a) supportare solo client Windows utilizzando "\ r \ n", come di fine linea.

b) fornire due file allegati, uno con il formato Linux e uno con il formato Windows.

c) non so se l'allegato deve essere letto da persone o macchine, ma se si tratta di persone che vorrei prendere in considerazione allegando un file HTML anziché testo normale. più portatile e molto più bella, troppo:)

Incapsula il vostro scrittore di fornire la sostituzione char, in questo modo:

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

}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top