2010-11-21 4 views
0

Chers tous, Je crée un simple décodeur de fichiers pour Android 2.2 qui doit trouver le nom de fichier du fichier encodé à partir d'un en-tête. Ce nom de fichier devrait ensuite être utilisé comme nom de fichier pour le fichier décodé (comme vous pouvez vous y attendre).Java: Les chaînes générées par la sous-chaîne ne sont pas traitées comme des chaînes codées en dur

Le nom de fichier est identifié par la sous-chaîne name=, de sorte que le nom réel commence 5 endroits après cela. La ligne est lue par BufferedReader et temporairement stockée dans currLine.

Pour une raison quelconque, je ne peux pas comprendre, ni trouver sur le web, des chaînes ne semblent pas toujours cordes ...

Quand je donne le nom de fichier comme

String fileOutName = "testfile.txt";
System.out.println("fileOutName contains: "+ fileOutName);
System.out.println("fileOutName type: "+ fileOutName.getClass());

Il fonctionne comme il se doit. Cependant la lecture à partir du fichier ne fonctionne pas:

String fileOutName = currLine.substring((currLine.indexOf("name=")+5));

donne pas de fichier de sortie, ni une exception IO. La chaîne est analysée correctement si: des lignes de débogage System.out je trouve dans les deux cas:

fileOutName contains: testfile.txt
fileOutName type: class java.lang.String

Quelqu'un a une idée de pourquoi cela ne fonctionnerait pas? : S

Merci

+0

Spécifiez-vous le bon chemin? – st0le

+0

pouvez-vous s'il vous plaît poster un extrait de code lorsque vous lisez l'en-tête du fichier? –

Répondre

2

Ugh ... Bien sûr, la routine substring a été également obtenir le caractère end of line qui ne peut évidemment pas être dans un nom de fichier, mais est apparemment pas retourné par Printline :)

Il est donc fixé par:

String fileOutName = currLine.substring((currLine.indexOf("name=")+5), currLine.length() -1);

Merci pour regarder et commenter ce, tout en posant la question, la réponse m'a frappé ... quelqu'un peut-il s'il vous plaît signaler un ma réponse une s correct? Je ne peux pas le faire pour les deux prochains jours, il semble.

+4

personne sauf vous pouvez marquer votre réponse comme correcte. Attendez simplement quelques couples de jours =) –

+0

Au lieu de currLine.length() -1, vous pouvez considérer la méthode String.trim(). De cette façon, tous les espaces avant et arrière sont supprimés. Pour moi, c'est un peu plus lisible :) – extraneon

+0

Merci pour les réponses! @extraneon - Je vais quand même utiliser le -1, car le format permet les espaces. Après name =, tous les caractères doivent être traités comme étant le nom désiré, sauf l'EOL que j'ai inclus avant bien sûr. Je vais le garder à l'esprit pour le futur, car il est définitivement plus lisible, merci :) –

Questions connexes