Jak mogę utworzyć nową File
(z java.io) w pamięci - nie na dysku twardym?jak utworzyć nowy plik java.io.file w pamięci?
Używam języka Java. Nie chcę zapisywać pliku na dysku twardym.
Jak mogę utworzyć nową File
(z java.io) w pamięci - nie na dysku twardym?jak utworzyć nowy plik java.io.file w pamięci?
Używam języka Java. Nie chcę zapisywać pliku na dysku twardym.
Aby napisać do strumienia, w pamięci, należy:
new ByteArrayOutputStream();
Możesz użyć java.io.StringWriter.
Jak mogę utworzyć nowy plik (z java.io) w pamięci, a nie na dysku twardym?
Może są mylące File
i Stream
:
File
jest abstrakcyjną reprezentacją pliku i katalogu ścieżek. Za pomocą obiektu File
można uzyskać dostęp do metadanych pliku w systemie plików i wykonać pewne operacje na plikach w tym systemie plików, na przykład usunąć lub utworzyć plik. Ale klasa File
nie zapewnia metod odczytu i zapisu zawartości pliku.Stream
, taki jak FileInputStream
lub FileOutputStream
. Strumienie te można utworzyć z obiektu File
, a następnie wykorzystać do odczytu i zapisu w pliku.Można utworzyć strumień na podstawie bufora bajtów, który rezyduje w pamięci, stosując ByteArrayInputStream
i ByteArrayOutputStream
do odczytu i zapisu do bufora bajtów w podobny sposób odczytu i zapisu z plik. Tablica byte
zawiera treść "Plików". Nie potrzebujesz wtedy obiektu File
.
Zarówno File...
i strumienie ByteArray...
dziedziczą java.io.OutputStream
i java.io.InputStream
, odpowiednio, tak aby można było korzystać ze wspólnej superklasę ukryć czy czytasz z pliku lub z tablicy bajtów.
Nie jestem pewien, czy taki właśnie był oryginalny plakat, ale jednym z przykładów, kiedy "Plik w pamięci" byłby przydatny, jest to, gdy chcesz ponownie użyć istniejącej biblioteki, która potrzebuje pliku java.io.file jako parametru wejściowego, ale rzeczywiście chcesz użyć "plików" przechowywanych w pamięci. W takim przypadku myślę, że jednym z rozwiązań byłoby użycie VFS Apache Commons do utworzenia instancji DefaultFileSystemManager i użycia jej do utworzenia elementu RamFileProvider. Dodałbym to jako (bardziej kompletną) poprawną odpowiedź, ale wydaje się, że to pytanie zostało zamknięte jakiś czas temu ... –
+1 Szukałem tego rodzaju rozwiązania, do testu jednostkowego przyjdź do komponentu bez konieczności używania rzeczywisty plik – GClaramunt
Jeśli nie chcesz tworzyć "rzeczywistego pliku", możesz spróbować utworzyć tymczasowy plik. Zobacz 'createTempFile' dla' java.io.file'. Plik ten można ustawić na automatyczne usuwanie po zakończeniu testu urządzenia. –
Więc po prostu chcesz bajtów w pamięci? –
Co próbujesz zrobić * z tym 'File'? –
"Plik" z definicji znajduje się na dysku twardym. –