我的 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/bu‌​dget_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 条件将始终为真,因为您的路径不正确