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();
}
Était-ce utile?

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é.

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

}
scroll top