Mã này kiểm tra sự tồn tại của thư mục trước tiên và tạo nó nếu không, và tạo tệp sau đó. Xin lưu ý rằng tôi không thể xác minh một số lệnh gọi phương thức của bạn vì tôi không có mã hoàn chỉnh của bạn, vì vậy tôi giả định rằng các lệnh gọi đến những thứ như getTimeStamp()
và getClassName()
sẽ hoạt động. Bạn cũng nên làm điều gì đó với khả năng IOException
có thể được ném ra khi sử dụng bất kỳ java.io.*
lớp nào - hoặc hàm ghi tệp của bạn sẽ ném ngoại lệ này (và nó được xử lý ở nơi khác) hoặc bạn nên thực hiện trực tiếp trong phương thức. Ngoài ra, tôi đã giả định rằng đó id
là loại String
- tôi không biết vì mã của bạn không xác định rõ ràng nó. Nếu nó là một cái gì đó khác giống như một int
, bạn có thể nên chuyển nó sang a String
trước khi sử dụng nó trong fileName như tôi đã làm ở đây.
Ngoài ra, tôi đã thay thế các append
cuộc gọi của bạn bằng concat
hoặc +
khi tôi thấy thích hợp.
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);
}
}
Bạn có thể không nên sử dụng các tên đường dẫn trống như thế này nếu bạn muốn chạy mã trên Microsoft Windows - Tôi không chắc nó sẽ làm gì với tên /
trong tên tệp. Để có tính di động đầy đủ, bạn có thể nên sử dụng một cái gì đó như File.separator để xây dựng đường dẫn của mình.
Chỉnh sửa : Theo nhận xét của JosefScript bên dưới, không cần thiết phải kiểm tra sự tồn tại của thư mục. Cuộc directory.mkdir()
gọi sẽ trả về true
nếu nó đã tạo một thư mục và false
nếu không, bao gồm cả trường hợp thư mục đã tồn tại.