de-vraag
  • Pytania
  • Tagi
  • Użytkownicy
Powiadomienia
Nagrody
Rejestracja
Po zarejestrowaniu się, będziesz otrzymywać powiadomienia o odpowiedziach i komentarzach do swoich pytań.
Zaloguj się
Brak tłumaczeń pasujących do Twojego wyszukiwania Jeśli masz już konto, zaloguj się, aby sprawdzić nowe powiadomienia.
Za dodane pytania, odpowiedzi i komentarze przewidziane są nagrody.
Więcej
Źródło
Edytuj
Tim  the Enchanter
Tim the Enchanter
Question

Czytanie zwykłego pliku tekstowego w Javie

Wygląda na to, że istnieją różne sposoby odczytywania i zapisywania danych z plików w Javie.

Chcę odczytać dane ASCII z pliku. Jakie są możliwe sposoby i ich różnice?

899 2011-01-17T18:29:13+00:00 3
 Palec
Palec
Edytowane pytanie 15. stycznia 2016 в 1:12
Programowanie
java
ascii
file-io
To pytanie ma 1 odpowiedź w języku angielskim, aby je przeczytać zaloguj się na swoje konto.
 Knubo
Knubo
17. stycznia 2011 в 6:42
2011-01-17T18:42:55+00:00
Więcej
Źródło
Edytuj
#11693556

Moim ulubionym sposobem na odczytanie małego pliku jest użycie BufferedReader i StringBuilder. Jest to bardzo proste i do rzeczy (choć nie jest szczególnie skuteczne, ale wystarczająco dobre dla większości przypadków):

BufferedReader br = new BufferedReader(new FileReader("file.txt"));
try {
    StringBuilder sb = new StringBuilder();
    String line = br.readLine();

    while (line != null) {
        sb.append(line);
        sb.append(System.lineSeparator());
        line = br.readLine();
    }
    String everything = sb.toString();
} finally {
    br.close();
}

Niektórzy zwrócili uwagę, że po Java 7 powinieneś użyć try-with-resources (tj. Funkcje automatycznego zamykania):

try(BufferedReader br = new BufferedReader(new FileReader("file.txt"))) {
    StringBuilder sb = new StringBuilder();
    String line = br.readLine();

    while (line != null) {
        sb.append(line);
        sb.append(System.lineSeparator());
        line = br.readLine();
    }
    String everything = sb.toString();
}

Kiedy czytam ciągi takie jak ten, zwykle i tak chcę wykonać jakąś obsługę ciągów na linię, więc wtedy idę na tę implementację.

Chociaż jeśli chcę po prostu wczytać plik do Stringa, zawsze używam metody Apache Commons IO z klasą IOUtils.toString(). Możesz rzucić okiem na źródło tutaj:

http://www.docjar.com/html/api/org/apache/commons/io/IOUtils.java.html

FileInputStream inputStream = new FileInputStream("foo.txt");
try {
    String everything = IOUtils.toString(inputStream);
} finally {
    inputStream.close();
}

A jeszcze prostsze z Javą 7:

try(FileInputStream inputStream = new FileInputStream("foo.txt")) {       
    String everything = IOUtils.toString(inputStream);
    // do something with everything string
}
 gtonic
gtonic
Edytowana odpowiedź 4. stycznia 2017 в 9:43
673
0
Solution / Answer
Aravind  R. Yarram
Aravind R. Yarram
17. stycznia 2011 в 6:31
2011-01-17T18:31:39+00:00
Więcej
Źródło
Edytuj
#11693554

ASCII jest plikiem TEKSTOWYM, więc używałbyś Readers do odczytu. Java obsługuje również czytanie z plików binarnych używając InputStreams. Jeśli odczytywane pliki są ogromne, chciałbyś użyć BufferedReader na wierzchu FileReader aby poprawić wydajność odczytu.

Przejdź przez ten artykuł jak używać Reader.

Polecam również pobranie i przeczytanie tej wspaniałej (ale darmowej) książki o nazwie Thinking In Java.

W Javie 7:

new String(Files.readAllBytes(...))

(docs) lub

Files.readAllLines(...)

(docs).

W Javie 8:

Files.lines(..).forEach(...)

(docs)

Lonely Neuron
Lonely Neuron
Edytowana odpowiedź 5. lutego 2019 в 11:21
545
0
Jesus Ramos
Jesus Ramos
17. stycznia 2011 в 6:35
2011-01-17T18:35:11+00:00
Więcej
Źródło
Edytuj
#11693555

Najprostszym sposobem jest użycie klasy Scanner w Javie i obiektu FileReader. Prosty przykład:

Scanner in = new Scanner(new FileReader("filename.txt"));

Scanner posiada kilka metod do odczytu łańcuchów, liczb, itp... Możesz poszukać więcej informacji na ten temat na stronie dokumentacji Javy.

Na przykład czytanie całej zawartości do String:

StringBuilder sb = new StringBuilder();
while(in.hasNext()) {
    sb.append(in.next());
}
in.close();
outString = sb.toString();

Również jeśli potrzebujesz konkretnego kodowania możesz użyć tego zamiast FileReader:

new InputStreamReader(new FileInputStream(fileUtf8), StandardCharsets.UTF_8)
 patrickf
patrickf
Edytowana odpowiedź 24. maja 2017 в 6:56
133
0
Dodaj pytanie
Kategorie
Wszystkie
Technologia
Kultura / Rekreacja
Życie / Sztuka
Nauka
Profesjonalny
Biznes
Użytkownicy
Wszystkie
Nowy
Popularny
1
365
Zarejestrowany 1 dzień temu
2
True Image
Zarejestrowany 1 dzień temu
3
archana agarwal
Zarejestrowany 3 dni temu
4
Maxim Zhilyaev
Zarejestrowany 6 dni temu
5
adambotsfford adambotsfford
Zarejestrowany 1 tydzień temu
DA
DE
EL
ES
FI
FR
ID
IT
JA
KO
LT
LV
NL
PL
PT
RU
SK
TR
ZH
© de-vraag 2022
Źródło
stackoverflow.com
na podstawie licencji cc by-sa 3.0 z przypisaniem