W Javie mam tekst z pola tekstowego w zmiennej String zwanej „tekstem”.
Jak mogę zapisać zawartość zmiennej „tekst” do pliku?
java
file
file-io
text-files
Justin White
źródło
źródło
Apache Commons IO zawiera kilka świetnych metod, w szczególności FileUtils zawiera następującą metodę:
który pozwala pisać tekst do pliku w jednym wywołaniu metody:
Możesz również rozważyć określenie kodowania pliku.
źródło
FileUtils.writeStringToFile(new File("test.txt"), "Hello File", forName("UTF-8"));
Spójrz na API Java File API
szybki przykład:
źródło
@Cleanup new FileOutputStream(...)
i gotowe.W Javie 7 możesz to zrobić:
Więcej informacji tutaj: http://www.drdobbs.com/jvm/java-se-7-new-file-io/231600403
źródło
content.getBytes(StandardCharsets.UTF_8)
można użyć do jawnego zdefiniowania kodowania.Właśnie zrobiłem coś podobnego w moim projekcie. Korzystanie z FileWriter uprości część zadania. I tutaj możesz znaleźć fajny samouczek .
źródło
.close()
nie rzuca (przynajmniej w Javie 7?), Czy ostatni trycatch może być zbędny?throw new RuntimeException(e);
Użyj
FileUtils.writeStringToFile()
z Apache Commons IO . Nie ma potrzeby wymyślania tego konkretnego koła.źródło
Możesz użyć poniższego kodu modyfikacji, aby zapisać plik z dowolnej klasy lub funkcji, która obsługuje tekst. Można się jednak zastanawiać, dlaczego świat potrzebuje nowego edytora tekstu ...
źródło
W Javie 11
java.nio.file.Files
klasa została rozszerzona o dwie nowe metody użytkowych napisać ciąg do pliku. Pierwsza metoda (patrz JavaDoc tutaj ) używa domyślnie zestawu znaków UTF-8 :Druga metoda (patrz JavaDoc tutaj ) pozwala określić indywidualny zestaw znaków:
Obie metody mają opcjonalny parametr Varargs do ustawiania opcji obsługi plików (patrz JavaDoc tutaj ). Poniższy przykład utworzyłby nieistniejący plik lub dołączył łańcuch do istniejącego:
źródło
W miarę możliwości wolę polegać na bibliotekach. To sprawia, że mniej prawdopodobne jest, że przypadkowo pomijam ważny krok (jak pomyłka wilcze strzały zrobione powyżej). Niektóre biblioteki są sugerowane powyżej, ale moim ulubionym do tego rodzaju rzeczy jest Google Guava . Guava ma klasę o nazwie Pliki, która ładnie działa do tego zadania:
źródło
Charsets.UTF-8
.Charsets.UTF_8
naprawdęFiles.asCharSink(file, charset).write(text)
Użyj Apache Commons IO api. To proste
Użyj API jako
Zależność Maven
źródło
Jeśli potrzebujesz utworzyć plik tekstowy na podstawie jednego ciągu:
źródło
Użyj tego, jest bardzo czytelny:
źródło
Możesz wstawić tę metodę do swoich klas. Jeśli używasz tej metody w klasie z metodą główną, zmień tę klasę na statyczną, dodając słowo klucza statycznego. Tak czy inaczej, musisz zaimportować plik java.io. *, aby działał, w przeciwnym razie File, FileWriter i BufferedWriter nie zostaną rozpoznane.
źródło
Możesz to zrobić:
źródło
Używanie
Java 7
:źródło
Files.write(targetPath, bytes);
Następnie użyj, aby zastąpić plik. Będzie działać zgodnie z oczekiwaniami.Korzystanie z org.apache.commons.io.FileUtils:
źródło
Jeśli zależy Ci tylko na wypchnięciu jednego bloku tekstu do pliku, spowoduje to zastąpienie go za każdym razem.
Ten przykład pozwala użytkownikowi wybrać plik za pomocą selektora plików.
źródło
Lepiej jest zamknąć moduł zapisujący / wyjściowy w ostatnim bloku, na wypadek, gdyby coś się wydarzyło
źródło
}
źródło
Myślę, że najlepszym sposobem jest użycie
Files.write(Path path, Iterable<? extends CharSequence> lines, OpenOption... options)
:Zobacz javadoc :
Proszę zanotować. Widzę, że ludzie już odpowiedzieli wbudowaną Javą
Files.write
, ale w mojej odpowiedzi szczególna rzecz, o której chyba nikt nie wspomina, to przeciążona wersja metody, która pobiera Iterable z CharSequence (tj. String) zamiastbyte[]
tablicy, dlategotext.getBytes()
nie jest wymagana , co wydaje mi się nieco czystsze.źródło
Jeśli chcesz zachować znaki powrotu karetki z łańcucha do pliku, oto przykład kodu:
źródło
Mój sposób jest oparty na strumieniu ze względu na działanie na wszystkich wersjach Androida i potrzeby pobierania zasobów takich jak URL / URI, wszelkie sugestie są mile widziane.
Jeśli chodzi o strumienie, dane wejściowe (InputStream i OutputStream) przesyłają dane binarne, gdy programista zapisuje ciąg do strumienia, najpierw musi go przekonwertować na bajty lub innymi słowy, zakodować.
źródło
Możesz użyć ArrayList, aby umieścić całą zawartość TextArea dla przykładu, i wysłać jako parametr, wywołując save, ponieważ pisarz właśnie napisał linie ciągów, a następnie używamy „for” wiersz po wierszu, aby zapisać naszą ArrayList na końcu będziemy zawartość TextArea w pliku txt. jeśli coś nie ma sensu, przykro mi to tłumacz Google i ja, którzy nie mówię po angielsku.
Obejrzyj Notatnik Windows, nie zawsze przeskakuje on przez linie i pokazuje wszystko w jednym wierszu, użyj WordPada ok.
źródło