Ten kod najpierw sprawdza istnienie katalogu, a jeśli nie, tworzy go, a następnie tworzy plik. Pamiętaj, że nie mogłem zweryfikować niektórych wywołań metod, ponieważ nie mam pełnego kodu, więc zakładam, że wywołania takich rzeczy jak getTimeStamp()
i getClassName()
będą działać. Powinieneś także zrobić coś z możliwym, IOException
który może zostać wyrzucony podczas korzystania z którejkolwiek z java.io.*
klas - albo twoja funkcja, która zapisuje pliki, powinna zgłosić ten wyjątek (i będzie obsługiwana gdzie indziej), albo powinieneś zrobić to bezpośrednio w metodzie. Założyłem też, że id
jest to typ String
- nie wiem, ponieważ twój kod nie definiuje go wprost. Jeśli jest to coś innego jak an int
, prawdopodobnie powinieneś rzucić go na a String
przed użyciem go w fileName, tak jak to zrobiłem tutaj.
Ponadto zamieniłem twoje append
połączenia na concat
lub, +
jak uznałem za stosowne.
public void writeFile(String value){
String PATH = "/remote/dir/server/";
String directoryName = PATH.concat(this.getClassName());
String fileName = id + getTimeStamp() + ".txt";
File directory = new File(directoryName);
if (! directory.exists()){
directory.mkdir();
}
File file = new File(directoryName + "/" + fileName);
try{
FileWriter fw = new FileWriter(file.getAbsoluteFile());
BufferedWriter bw = new BufferedWriter(fw);
bw.write(value);
bw.close();
}
catch (IOException e){
e.printStackTrace();
System.exit(-1);
}
}
Prawdopodobnie nie powinieneś używać takich nazw ścieżek, jeśli chcesz uruchomić kod w systemie Microsoft Windows - nie jestem pewien, co zrobi z /
w nazwach plików. Aby zapewnić pełną przenośność, prawdopodobnie powinieneś użyć czegoś takiego jak File.separator do konstruowania ścieżek.
Edycja : zgodnie z komentarzem JosefScript poniżej, nie jest konieczne testowanie istnienia katalogu. directory.mkdir()
Rozmowa powróci true
jeśli utworzony katalog, a false
jeśli tak nie jest, w tym przypadku, gdy katalog już istnieje.