26. maj 2009 - 18:06Der er
6 kommentarer og 1 løsning
Læs .txt-fil som InputStream
Hej, Jeg har et problem med at læse hver linie af en .txt-fil. Jeg indlæser filen som en InputStream, hvorefter jeg vil overføre hver linje (alle er kun med ét ord) i en List<String>. Jeg har denne method, som dog ikke fungerer helt optimalt. List'en indeholder ikke txt-filens indhold, men info om filen, f.eks. er det første entry "#!/usr/bin/env xdg-open". Hvordan får jeg den rigtige information ud?
public List<String> getWords(InputStream aFile) {
List<String> contents = new ArrayList<String>(); try { BufferedReader input = new BufferedReader(new InputStreamReader(aFile)); try { String line = null; //not declared within while loop while (( line = input.readLine()) != null){ contents.add(line); } } catch (Exception ex) { ex.printStackTrace(); } catch (Exception ex){ ex.printStackTrace(); } input.close(); return contents;
Ja, det er jeg sikker på. Filen indeholder kun en masse engelske ord. Selvom der er et par tusinde ord i txt-filen får jeg kun følgende værdier i min List:
1) Der bliver laest million af tekst filer i Java programmer hver dag, saa det boer virke. 2) Din kode tester eksplicit for null i while loekken, saa det er mystisk at din liste indeholder null'er.
Kan du poste noget komplet kode som vi kan teste med?
Jeg kan starte med at sige at jeg programmerer til det mobile operativsystem Android, hvis det kan have en betydning.
Jeg kalder min method fra følgende kode:
public class Main extends Activity {
private String userWord;
/** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main);
//Initialiserer min class WordReader, som //indeholder getWords-metoden final WordReader reader = new WordReader(); Resources myResources = getResources(); InputStream file = myResources.openRawResource(R.raw.words);
//Får txt-filen fra en resource-mappe som android //bruger til at opbevare forskellige filer som //tilføjes til den færdige fil. Det er der ingen //fejl i. InputStream file = myResources.openRawResource(R.raw.words); List<String> words = new ArrayList<String>();
//Her kalder den så min method words = reader.getWords(file);
Min class ser således ud:
public class WordReader {
public List<String> getWords(InputStream aFile) {
List<String> contents = new ArrayList<String>(); try { BufferedReader input = new BufferedReader(new InputStreamReader(aFile)); try { String line = null; //not declared within while loop while (( line = input.readLine()) != null){ contents.add(line); } } finally { input.close(); } } catch (Exception ex){ ex.printStackTrace(); }
Nu har jeg fået det til at virke. Sjovt nok, så var det faktisk hvad der stod i filen som den udskrev. Problemet var bare, at de gange jeg har åbnet filen inde fra Eclipse har den åbnet den rigtige fil. Den anden fil var åbentbart bare en genvej.
Men tak for hjælpen, læg et svar. Du fik mig trods alt gjort mig sikker på, at det ikke var koden den var galt med.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.