2012-05-09 3 views
0

J'essaie de sauvegarder le contenu d'une ArrayList dans un fichier txt mais quand je le fais, je reçois beaucoup de caractères indésirables. Je peux gérer les virgules avec string.replace() mais je me demande s'il existe un autre moyen de filtrer ces types de caractères plus efficacement? en particulier la partie "¬í t [" dans le fichier txt. Il y a également d'autres caractères qui sont montrés dans les guillemets ci-dessus mais il ne me laissera pas les copier ici. Mon code à afficher dans le fichier est ci-dessous. J'ajoute plusieurs chaînes à ArrayList mais le problème semble être avec la liste de tableau elle-même. Comme indiqué ci-dessous, j'ai converti la liste en une chaîne de caractères et je l'ai imprimée de cette manière, car il semble que je reçois moins de caractères indésirables. Toute aide serait grandement appréciée.Suppression des caractères indésirables de l'arborescence? Java

String Output = ScanOutputList.toString(); 
FileOutputStream fstream = new FileOutputStream("Port_Scan.txt"); 
ObjectOutputStream ostream = new ObjectOutputStream(fstream); 

ostream.writeObject(Output); 
ostream.close(); 
+0

Quelle est la classe des éléments dans ArrayList? A-t-il une fonction toString() définie? – Luciano

+0

La seule façon dont je peux penser à vous est de spécifier dans votre code exactement quels caractères à exclure, ce qui pourrait vous conduire à écrire une déclaration if plutôt longue et désagréable. Serait-il plus facile de spécifier les caractères à inclure? –

+0

En outre, au lieu d'écrire la chaîne à l'aide d'un ObjectOutputStream-> FileOutputStream, utilisez un FileWriter. Celui-ci peut accepter String et les écrit dans le fichier tel quel (en utilisant l'encodage par défaut). – Luciano

Répondre

0

Si certains caractères wierd sont votre principal problème et que vous voulez tout simplement de se débarrasser de tout ce qui est pas de caractère « standard », ce que vous pouvez faire est jeté vos chaînes tableaux char et ensuite coulé les caractères à ints . Si int donné est trop grand, supprimez-le. Enfin - recréer vos chaînes à partir de ces int qui n'ont pas été supprimés.

0

Si vous souhaitez écrire du texte dans un fichier (comme indiqué par l'extension .txt), n'utilisez pas de flux de sortie. Utiliser des rédacteurs:

FileWriter fw = null;

try { 
    fw = new FileWriter(file); 
    fw.print(StringUtils.join(collection, System.getProperty("line.separator"))); 
} 
finally { 
    IOUtils.closeQuietly(fw); 
} 

Je ne serait pas aussi utiliser la méthode « toString » sur la liste, car il vous donne le format:

[ item1.toString(), item2.toString() ] 

Il est préférable de mettre les choses dans le format que vous voulez. Le code ci-dessus mettrait 1 article par ligne, et mettrait un saut de ligne (dépendant du système) entre chacun d'eux.

Comme mentionné ci-dessus, le type d'objet dans la liste est également important, car il utiliserait la méthode "toString()" lors de l'écriture de l'objet. Vous pouvez faire une sortie personnalisée en remplaçant StringUtils.join par une boucle for et en écrivant exactement ce que vous voulez dans la boucle.

+0

ps: Je suppose que vous utilisez des paquets commons-lang et commons-io qui sont où les classes StringUtils et IOUtils résident. – Matt

Questions connexes