2012-11-06 11 views
6

Chcę napisać do pliku tymczasowego w trybie dołączania. Widzę, że plik jest tworzony, ale dane z bufora String nie są do niego zapisywane. Czy ktoś może mi powiedzieć, dlaczego? Poniżej znajduje się kod mam napisane,Zapisywanie do pliku tymczasowego w java

public static void writeToFile(String pFilename, StringBuffer sb) 
     throws IOException { 

    String property = "java.io.tmpdir"; 


    String tempDir = System.getProperty(property); 

    File dir = new File(tempDir); 
    File filename = File.createTempFile(pFilename, ".tmp", dir); 
    FileWriter fileWriter = new FileWriter(filename.getName(), true); 
    System.out.println(filename.getName()); 
    BufferedWriter bw = new BufferedWriter(fileWriter); 
    bw.write(sb.toString()); 
    bw.close(); 
} 
+0

Skąd wiadomo, że dane nie zostały do ​​niej zapisane? [2-argumenty 'Plik # createTempFile()'] (http://docs.oracle.com/javase/7/docs/api/java/io/File.html#createTempFile%28java.lang.String,%20java .lang.String% 29) nie robi nic, aby określić katalog, przy okazji. –

+0

@Matt: plik jest tworzony, ale nie widzę żadnych danych w pliku, a także jest to możliwe dla plików utworzonych bez generowania liczb losowych. – user1688404

+0

Czy na pewno nie ma błędów w zawartości StringBuffer? Spróbuj i napisz "Hello, World!" ciąg do pliku. –

Odpowiedz

5
FileWriter fileWriter = new FileWriter(filename.getName(), true); 

powinny być

FileWriter fileWriter = new FileWriter(filename, true); 
+0

['FileWriter (String)'] (http://docs.oracle.com/javase/7/docs/api/java/io/FileWriter.html#FileWriter (java.lang.String)) istnieje. Ponieważ "nazwa pliku" w pytaniu to "plik", ten konstruktor powinien działać z ['File.getAbsolutePath()'] (http://docs.oracle.com/javase/7/docs/api/java/io /File.html#getAbsolutePath()). –

+0

Również FileWriter (String, boolean append) istnieje, więc cokolwiek tichodroma mówi jest poprawne –

+0

@Joop: Dzięki to działa .. ale jest możliwe wygenerowanie nazw plików bez generowania liczb losowych – user1688404

0

próby wywołania bw.flush() przed zamknięciem pisarza. Chociaż myślę, że pisarz powinien zadzwonić automatycznie równo przed zamknięte ...

0
FileWriter fileWriter = new FileWriter(filename.getName(), true); 

powinny być

FileWriter fileWriter = new FileWriter(filename, true); 

można również użyć tego

FileWriter fileWriter = new FileWriter(filename.getAbsolutePath+filename.getName(), true); 

notatka

`filename.getName();` 

zwraca plik wcielić się bez absolutnej ścieżki. Tak więc może się zdarzyć, że tworzy plik w bieżącym katalogu roboczym i zapisuje w nim.

+0

Jak to rozwiązuje problem? –

1

Zamiast tworzyć plik w katalogu temp, utworzyć plik w katalogu roboczym i użyj objFile.deleteOnExit() .To również działa tak samo jak tworzenie pliku w katalogu TEMP.

+1

Dlaczego uważasz, że jest to lepszy pomysł, aby uzyskać działający plik tymczasowy? –

+0

to nie jest lepszy pomysł, ale jest to alternatywa, zadziała. – Vijay

+1

Plik tymczasowy "powinien" również działać. –

4

to działa:

public static void writeToFile(String pFilename, StringBuffer sb) throws IOException { 
    File tempDir = new File(System.getProperty("java.io.tmpdir")); 
    File tempFile = File.createTempFile(pFilename, ".tmp", tempDir); 
    FileWriter fileWriter = new FileWriter(tempFile, true); 
    System.out.println(tempFile.getAbsolutePath()); 
    BufferedWriter bw = new BufferedWriter(fileWriter); 
    bw.write(sb.toString()); 
    bw.close(); 
} 

Uwaga wykorzystanie FileWriter(File, boolean) i System.out.println(tempFile.getAbsolutePath()).

Powiązane problemy