L'écriture de nouvelles de la ligne de caractères en Java qui fonctionne sur différents systèmes d'exploitation
J'ai un programme Java qui génère un fichier texte sur un serveur UNIX. Ce fichier texte est ensuite envoyé à l'ordinateur d'un client à l'aide d'autres systèmes où il est censé être ouvert dans le bloc-notes de Windows. Comme nous sommes bien conscients que le bloc-notes ne seront pas en mesure de trouver une nouvelle ligne qu'il utilise Windows CR LF.
Je suis en utilisant
System.getProperty("line.separator");
Est-il une autre façon d'y parvenir, plate-forme independece de sorte qu'un fichier généré sur UNIX peuvent être affichées dans le bloc-notes de Windows avec la mise en forme appropriée, comme le changement de certains UNIX propriété pour la nouvelle ligne?
Le bloc-notes est un pré-requis, c'est pourquoi le changement qui n'est pas possible.
Il semble que votre question est en soi contraire. Vous avez besoin d'un moyen de spécifier indépendant de la plate-séparateur de ligne, mais vous par vous-même sont d'accord, séparateur de ligne est différent sur différentes plates-formes 🙂 Si vous avez besoin de corriger l-s sur windows -- vous devriez écrire explicitement CR LF. Bien que, n'est-ce pas les versions actuelles de reconnaître le bloc-notes de ligne unix séparateurs?
c'est mon problème exact 🙂 je suis à l'utilisation de l'élément de séparation et de rencontrer ce problème. Je fais une demande pour une solution de rechange pour la même chose 🙂
si votre unix de reporting et de bloc-notes de windows utiliser différents l-s -- il n'y a aucun moyen que vous pouvez traiter avec elle, mais pour avoir un logiciel de conversion entre les deux. Actuel VCS (SVN, par exemple) peut convertir automatiquement l-s -- juste pour l'exemple
d'accord. puis devra faire deux copies d'un même fichier peut être utilisé sur WIndows et un sous UNIX? mais qui a créé des problèmes avec leur maintien. ce problème est une ouch 🙂
OriginalL'auteur Anish Mohile | 2012-01-17
Vous devez vous connecter pour publier un commentaire.
Pas. Vous devez choisir un format de fichier unique, Windows ou UNIX. Étant donné que votre client exige que le bloc-notes, vous pouvez probablement choisir le format de Windows, ce qui signifie que vous avez juste besoin "\r\n" caractères. Le fait que UNIX génère le fichier peut être considérée comme non pertinente.
Vous êtes essentiellement bloqué alors 🙂 Pas de chance pour que votre client peut utiliser un UNIX-friendly éditeur comme Textpad? Comment générer deux fichiers, l'un avec format UNIX, un avec Windows? Espérons que maintenant vous comprenez le problème fondamental avec les deux formats différents, et il n'existe pas de double-compatible newline option disponible pour vous?
J'espérais un double compatible newline option est venu depuis le temps que j'avais appris sur les nouvelles lignes. mais il n'a pas. Aurez probablement à forcer l'utilisateur à utiliser le bloc-notes comme il est livré pré installés. D'autres éditeurs pourraient encourir des coûts de licence pour le client (Problèmes avec les entreprises 🙂 Quand vont-ils commencer à utiliser l'open source en dehors de JAVA)
il y a des dizaines d'éditeurs de texte gratuits, google eux, je suis sûr que vous trouverez des bons candidats? sinon, as - tu pensé de générer des rapports au format CSV, et vos clients peuvent utiliser, par exemple, Excel pour les lire? élimine les CR/LF problème de fichiers texte
Difficile 🙂 je pense que vous pour utiliser Windows le format de votre fichier texte ensuite. Les besoins du client vient en premier. Pour UNIX travail, vous pouvez utiliser la commande dos2unix pour convertir votre fichier pour une utilisation, ou envisager d'autres solutions de contournement, mais, fondamentalement, il semble que vous n'avez pas le choix mais pour CR/LF pour de bon le bloc-notes de l'affichage.
OriginalL'auteur Brian
Depuis Java 7
System.lineSeparator()
..Je suis tombé sur cette question, et il ya des chances que d'autres pourraient faire de même. Je comprends que c'est un assez vieux post, mais comme nous le savons tous, les Api Java ne cessent de changer avec le temps. De l'OMI, de l'Écriture de nouvelles de la ligne de caractères en Java qui fonctionne sur différents systèmes d'exploitation pourrait être réalisé avec des
System.lineSeparator()
de l'API qui a été là depuis Java 7. Veuillez vérifier ceci,Système.lineSeperator()
OriginalL'auteur Sudhansu Choudhary
Mac OS X prend en charge les CR, LF et CRLF
Linux utilise LF, mais les fichiers à l'aide de CRLF et CR rendu trop.
Windows utilise CRLF
la réponse: il suffit de toujours utiliser CRLF, alors vous avez de soutien pour toutes les plateformes.
CR = '\r' , LF='\n'
pour faire des chaînes de la forme : "mytexthereblahblahblah \r\n"
la plupart des systèmes unix et *nixes (BSD, Darwin, Linux) utilisez les mêmes outils et les éditeurs etc. Je ne pense pas que cela va provoquer des problèmes, sauf si vous utilisez une ancienne unix à partir de 1979 🙂
ses Solaris. il l'habitude de jeter des erreurs, mais il affiche unncessary des caractères supplémentaires (le CR qui est; que la LF sera interprété comme une nouvelle ligne)
OriginalL'auteur arian
Ce qui est faux. Vous ne vous souciez pas de ce que le système de séparateur de ligne est. Vous avez besoin d'écrire un fichier dans le format que fichier est censé être. Il n'a pas d'importance ce que le système génère le fichier.
Un fichier est une suite d'octets. Vous devez écrire le flux d'octets que le format de fichier dit que vous devriez écrire, et qui est indépendant de la ligne séparée de tout système utilise.
Le point de l'ensemble des formats de fichiers pour les fichiers de permis pour être déplacé d'un système à l'autre sans aucun problème de compatibilité. Si vous écrivez dans le fichier de ce format de fichier des appels pour, le fichier sera portable. Vous écrivez quelque chose qui est spécifique à un système dans un fichier, c'est à peu près toujours comportement défectueux. (Sauf dans les rares cas où le fichier n'est pas censé pour être portable.)
la droite. et c'est là que mon problème est sa un fichier txt 🙁
D'accord, et vous êtes de conversion de fin de ligne, lors de l'exportation des fichiers ou pas? Si vous êtes, utilisez le système local-style de fin de ligne. Si non, utilisez CRLF.
j'utilise le Système.getProperty qui me donne du style de système de fins de ligne, qui sont essentiellement Unix, car il fonctionne sur Solaris. Il semble y avoir aucun moyen de les rendre interopérables devront convaincre les gens d'utiliser le bloc-notes obligatoirement 🙂
OriginalL'auteur David Schwartz
Avez-vous vérifié si le serveur UNIX peut tolérer de Windows style des retours à la ligne? Car l'exigence est editting dans le bloc-notes, vous aurez besoin de mettre Windows style des retours à la ligne dans le fichier à l'aide de
System.print("\r\n")
.Si le serveur UNIX ne peut pas gérer Windows ligne séparateurs, alors votre meilleure option est probablement pour traiter le fichier après modification pour convertir les sauts de ligne à l'aide de dos2unix sur le serveur UNIX.
Le bloc-notes exigence signifie que ce n'est pas vraiment une plate-forme exigence d'indépendance - c'est une exigence pour le serveur Unix à Windows retours à la ligne.
Il est tout au sujet de satisfaire aux exigences / contraintes. Si le fichier doit être editted dans le bloc-notes, il doit contenir CRLF. Si elle doit être lue être un processus UNIX qui ne peuvent pas tolérer CRLF, alors ils doivent être convertis.
yep. mais il peut être utilisé sur les deux et c'est là que je suis coincé.!! mais le bloc-notes n'ont plus la priorité
OriginalL'auteur Richard Neish
Il n'y a pas de moyen direct pour avoir de tels interopérables simple fichier texte. En conséquence, vous devez passer à un fichier structuré comme doc ou excel ou pdf ou tout simplement fixer le format de windows ou UNIX et de communiquer les utilisateurs finaux d'utiliser le même.
Cette réponse est un agrégat de la discussion ci-dessus.
Merci beaucoup de la communauté pour l'aider. Si aucune autre solution n'est trouvée au problème. Merci de poster pour les autres 🙂
OriginalL'auteur Anish Mohile