我的 java 代码没有在 Linux 上写入文件
My java code doesn't write a file on Linux
我有一些用于输入费用的代码。但是,该程序不会将文本文件写入 Linux (Ubuntu 16.04) 上的指定文件夹。该程序过去通常将文件写入代码所在的文件夹中。现在,我试图将文件写入一个特定的文件夹,但它失败了(即使我为所有用户设置了读取、写入和执行的权限,文件也没有创建它。)我想添加代码创建目录但无法在特定目录中写入文件。任何帮助或指导将不胜感激。
import java.io.*
import java.util.EnumSet;
import java.util.Set;
public class Create_File {
private Services services = new Services();
final Set<PosixFilePermission> perms = PosixFilePermissions.fromString("rwxrwxrwx");
public void create_File(String content) {
int product_id =0;
String headline = "XXXX" ;
String username = System.getProperty("user.home");
String dataFolder = System.getProperty("user.home") + "/My_Data/Budget_backup";
System.out.println(username);
File directory = new File(dataFolder+File.separator+"Budget_app_data_expenses");
String name_of_file = "budget_back_up.txt";
File file = new File(directory+File.separator+ name_of_file);
System.out.println(file.toString());
Path path = FileSystems.getDefault().getPath(dataFolder, name_of_file );
if (Files.notExists(path, new LinkOption[]{LinkOption.NOFOLLOW_LINKS})){
try {
Files.createDirectories(
Paths.get(dataFolder),
PosixFilePermissions.asFileAttribute(perms));
//directory.mkdirs();
//file.createNewFile();
product_id = 1;
System.out.println("file created");
FileWriter writer = new FileWriter(file, true);
BufferedWriter bw = new BufferedWriter(writer);
bw.write(headline);
bw.close();
}catch(IOException ex){
ex.printStackTrace();
}
}else {
product_id = services.max_id();
System.out.println("The directory is already on the computer");
try {
FileWriter writer = new FileWriter(file, true);
BufferedWriter bw = new BufferedWriter(writer);
bw.write("\n"+ "("+ product_id + " , " +content);
bw.close();
}catch(IOException ex){
ex.printStackTrace();
}
}
}
这个错误可能是由于给定 path.It 中没有目录需要创建,这可以使用 mkdirs()
来完成
/home/USER/My_Data/Budget_backup/Budget_app_data_expenses/budget_back_up.txt (No such file or directory)
最初创建目录后,您应该不会遇到任何错误
取消注释 directory.mkdirs() 在 Mac 和 Fedora
中对我都有效
Files.createDirectories(
Paths.get(dataFolder),
PosixFilePermissions.asFileAttribute(perms));
directory.mkdirs();
另外看看你的代码
String dataFolder = System.getProperty("user.home") + "/My_Data/Budget_backup";
File directory = new File(dataFolder+File.separator+"Budget_app_data_expenses");
File file = new File(directory+File.separator+ name_of_file);
Path path = FileSystems.getDefault().getPath(dataFolder, name_of_file );
在路径对象中,您试图在不正确的目录中查找文件 /My_Data/Budget_backup"
在 /My_Data/Budget_backup/Budget_app_data_expenses
中创建文件
在这种情况下,您的 if 条件在错误的目录中搜索文件,并且 If 条件将始终为真,因为您的路径不正确
我有一些用于输入费用的代码。但是,该程序不会将文本文件写入 Linux (Ubuntu 16.04) 上的指定文件夹。该程序过去通常将文件写入代码所在的文件夹中。现在,我试图将文件写入一个特定的文件夹,但它失败了(即使我为所有用户设置了读取、写入和执行的权限,文件也没有创建它。)我想添加代码创建目录但无法在特定目录中写入文件。任何帮助或指导将不胜感激。
import java.io.*
import java.util.EnumSet;
import java.util.Set;
public class Create_File {
private Services services = new Services();
final Set<PosixFilePermission> perms = PosixFilePermissions.fromString("rwxrwxrwx");
public void create_File(String content) {
int product_id =0;
String headline = "XXXX" ;
String username = System.getProperty("user.home");
String dataFolder = System.getProperty("user.home") + "/My_Data/Budget_backup";
System.out.println(username);
File directory = new File(dataFolder+File.separator+"Budget_app_data_expenses");
String name_of_file = "budget_back_up.txt";
File file = new File(directory+File.separator+ name_of_file);
System.out.println(file.toString());
Path path = FileSystems.getDefault().getPath(dataFolder, name_of_file );
if (Files.notExists(path, new LinkOption[]{LinkOption.NOFOLLOW_LINKS})){
try {
Files.createDirectories(
Paths.get(dataFolder),
PosixFilePermissions.asFileAttribute(perms));
//directory.mkdirs();
//file.createNewFile();
product_id = 1;
System.out.println("file created");
FileWriter writer = new FileWriter(file, true);
BufferedWriter bw = new BufferedWriter(writer);
bw.write(headline);
bw.close();
}catch(IOException ex){
ex.printStackTrace();
}
}else {
product_id = services.max_id();
System.out.println("The directory is already on the computer");
try {
FileWriter writer = new FileWriter(file, true);
BufferedWriter bw = new BufferedWriter(writer);
bw.write("\n"+ "("+ product_id + " , " +content);
bw.close();
}catch(IOException ex){
ex.printStackTrace();
}
}
}
这个错误可能是由于给定 path.It 中没有目录需要创建,这可以使用 mkdirs()
来完成/home/USER/My_Data/Budget_backup/Budget_app_data_expenses/budget_back_up.txt (No such file or directory)
最初创建目录后,您应该不会遇到任何错误
取消注释 directory.mkdirs() 在 Mac 和 Fedora
中对我都有效 Files.createDirectories(
Paths.get(dataFolder),
PosixFilePermissions.asFileAttribute(perms));
directory.mkdirs();
另外看看你的代码
String dataFolder = System.getProperty("user.home") + "/My_Data/Budget_backup";
File directory = new File(dataFolder+File.separator+"Budget_app_data_expenses");
File file = new File(directory+File.separator+ name_of_file);
Path path = FileSystems.getDefault().getPath(dataFolder, name_of_file );
在路径对象中,您试图在不正确的目录中查找文件 /My_Data/Budget_backup"
在 /My_Data/Budget_backup/Budget_app_data_expenses
中创建文件在这种情况下,您的 if 条件在错误的目录中搜索文件,并且 If 条件将始终为真,因为您的路径不正确