2010-07-14 12 views
3

J'ai un fichier texte créé dans un environnement Unix en utilisant le code Java.Retour chariot (" r n") en Java

Pour l'écriture du fichier texte, j'utilise java.io.FileWriter et BufferedWriter. et pour newline après chaque ligne j'utilise la méthode bw.write ("\ r \ n"). (où pc est objet de BufferedWriter) et envoyer ce fichier texte en attachant dans le courrier de l'environnement unix lui-même à d'autres environnements tels que (mainframe, fenêtres)

Ma question est, si le téléchargement de mon client le fichier texte dans le système Mainframe, ils ont trouvé que dans le fichier texte un "caractère spécial" (comme une petite boîte rectangulaire) présentant et les données ne sont pas correctement alignés. Bw.write ("\ r \ n") ne fonctionne pas je le pense .. (mais fonctionne très bien dans Windows)

Je veux même alignement de fichier texte tel qu'il est dans un environnement unix et sans aucun symbole de caractère spécial
aussi, s'ils ont ouvert le fichier texte dans l'ordinateur central, des fenêtres environnements ou tout autre enviroments.

Comment résoudre le problème. Merci d'avance pour votre aide.

coller mon morceau de code java ici pour référence .. (exécution d'un code java dans unix
environnement)

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

Quel système mainframe, et quel programme l'ouvrent-ils? –

+0

@ pour toutes les versions de mainframes. – Manu

+1

Vous voulez donc un fichier qui peut être ouvert sur n'importe quel système d'exploitation sur n'importe quel mainframe, indépendamment de la terminaison de ligne qu'il utilise, mais aussi de son encodage par défaut? Bonne chance avec cela ... –

Répondre

6

de Contrairement à votre demande, votre code clairement n'est pas écrit « \ r \ n "après chaque ligne. Il appelle BufferedWriter.newLine() qui utilise le séparateur de lignes par défaut de la plate-forme actuelle (sauf si vous définissez explicitement la propriété système line.separator). Sur les systèmes Unix, ce sera "\ n".

Maintenant, vous devez réfléchir à ce que vous voulez que le résultat soit sur les systèmes cible où il sera lu. Pour Windows, cela signifie que devrait écrire explicitement "\ r \ n" ... Je ne connais pas les ordinateurs centraux dont vous parlez - vous devrez donner plus de détails.

Notez que le fait qu'il existe différents séparateurs de ligne signifie qu'aucun fichier texte ne sera universellement approprié. De nombreux éditeurs de texte sur différentes plates-formes à faire face à une ligne de séparation ... mais il y aura toujours des gens qui ne sont pas :(

1

Pour écrire un fichier avec les fins de ligne environnement correct, la classe recommandée est PrintWriter. La méthode println(String) va afficher la chaîne donnée et la ligne appropriée se terminant au fichier de sortie


Jon Skeet a raison, bien. Votre problème est pas tant technique que déterminer le format fichier dont vous avez besoin sur le système qui. Si un fichier est traité sur un système Windows, il est attendu que les lignes se terminent par \r\n, sur les systèmes Unix, par \n. Tout cela est encore plus compliqué lorsque vous utilisez FTP pour transférer des fichiers entre différents systèmes: le mode ASCII traduira automatiquement les fins de ligne, pas les binaires. Le courrier électronique ne tolère pas non plus les formats de texte: Outlook mutile fréquemment les fichiers texte envoyés à travers les frontières du système.

Les gens ici sur SO connaissent ce genre de choses. Donnez-nous plus de détails pour travailler et nous pouvons proposer des solutions. Mais il ne sera probablement pas possible d'écrire un fichier sur un système qui sera lu correctement sur n'importe quel système.

+0

PrintWriter est méchant - il avale des exceptions, ce qui est une très mauvaise idée. Personnellement, je suggérerais * explicitement * d'écrire le séparateur de lignes si celui que vous voulez n'est pas celui par défaut pour la plate-forme sur laquelle vous travaillez. (Je ne suis pas intéressé par la définition d'une propriété système pour l'instant.) Soyez juste explicite.) –

Questions connexes