2011-08-16 14 views
68

Mam funkcję, która akceptuje plik jako argument. Nie chcę tworzyć/zapisywać nowego pliku (nie mam dostępu do zapisu do systemu plików), aby przekazać moje dane ciągów do funkcji. Powinienem dodać, że dane String nie istnieją w pliku (więc nie mogę odczytać moich danych z pliku).Utwórz obiekt pliku w pamięci z ciągu znaków w języku Java

Czy mogę używać strumieni i "rzutować" je na obiekty plików?

+2

Czy można połączyć/opublikować kod, który pobiera obiekt 'File'? Jak stwierdzono w odpowiedziach, obiekt 'File' jest jak odniesienie do lokalizacji w systemie plików, więc trudno byłoby symulować bez rzeczywistego pliku. Jeśli jednak twoja funkcja zajęła 'FileReader' lub' FileInputStream', możesz łatwo zmodyfikować kod tak, aby akceptował wprowadzanie danych innych niż pliki. – 101100

+0

Pliki mapowane w pamięci mogą być Twoim wyborem. Są to specjalne pliki w Javie, które umożliwiają programowi Java dostęp do treści bezpośrednio z pamięci. Aby uzyskać szczegółowe informacje, należy przejść przez ten link: http://javarevisited.blogspot.com/2012/01/memorymapped-file-and-io-in-java.html – Bikku

Odpowiedz

32

Nie; wystąpienia klasy File reprezentują ścieżkę w systemie plików. Dlatego możesz użyć tej funkcji tylko z plikiem. Ale może jest przeciążenie, które ma zamiast tego InputStream?

+0

Nie:/Brak funkcji przeciążenia –

-1
FileReader r = new FileReader(file); 

Użyj czytnika plików, aby załadować plik, a następnie zapisać jego zawartość w buforze ciągów.

example

Powyższy link pokazuje przykład, jak tego dokonać. W innym poście na tę odpowiedź powiedz, aby załadować plik do pamięci, nie potrzebujesz dostępu do zapisu, o ile nie planujesz wprowadzania zmian w rzeczywistym pliku.

7

Obiekt w języku Java reprezentuje ścieżkę do katalogu lub pliku, a nie sam plik. Nie trzeba mieć dostęp do zapisu plików, aby utworzyć File obiekt, wystarczy, jeśli masz zamiar faktycznie zapisu pliku (za pomocą FileOutputStream na przykład)

3

Klasa File reprezentuje „pomysł” pliku, a nie faktyczny uchwyt do użycia dla operacji we/wy. Z tego powodu klasa File ma metodę .exists(), aby stwierdzić, czy plik istnieje, czy nie. (Jak można uzyskać obiekt, którego nie ma? File).

W przeciwieństwie do tego, konstruowanie new FileInputStream(new File("/my/file")) daje rzeczywisty strumień do odczytywania bajtów.

+2

Dobra rada; nie odpowiada jednak na pytanie. – Jus12

47

Zwykle, gdy metoda akceptuje plik, w pobliżu znajduje się inna metoda akceptująca strumień. Jeśli tak nie jest, interfejs API jest źle zakodowany. W przeciwnym razie możesz użyć plików tymczasowych, w których uprawnienia są zwykle przyznawane w wielu przypadkach. Jeśli to aplet, możesz request write permission.

Przykład:

try { 
    // Create temp file. 
    File temp = File.createTempFile("pattern", ".suffix"); 

    // Delete temp file when program exits. 
    temp.deleteOnExit(); 

    // Write to temp file 
    BufferedWriter out = new BufferedWriter(new FileWriter(temp)); 
    out.write("aString"); 
    out.close(); 
} catch (IOException e) { 
} 
+0

Nie można zażądać pozwolenia na zapis (to Google AppEngine) –

Powiązane problemy