Linux_使用java给文件添加权限

在linux环境下使用java IO流复制文件,但是发小复制后的文件没有执行权限

我的环境是在一个SpringBoot项目,在启动时需要将一些文件拷贝到项目同级目录中,但是拷贝的文件没有执行权限,达不到预期效果。

网上有很多解决办法,试过了,不可用,一开始一直以为是别人的方法不行,后来发现是SpringBoot(极有可能,猜测)问题,解决如下

刚开始时是这种写法:简化的代码

public class InitEnvironment implements CommandLineRunner{
    //CommandLineRunner是SpringBoot提供的一个类,实现run方法的代码会在项目启动时自动执行

    @Override
    public void run(String... args) throws Exception {

        ......

        //linux添加权限代码
        String[] cmd = new String[]{"chmod 777 .../*"};
        ExecuteComandUtils.execute(cmd);//这个是我自己写的工具类,执行上面的代码

        ......
    }
}

通过日志发现,这段代码也执行了,但是就是不成功。后来给这段代码放在SpringBoot启动文件中终于成功了,why?(Springboot项目在创建时会有一个启动文件Application.java文件,仔细看操作)

@SpringBootApplication
public class Application {

    public void static main(String[] args){

        SpringApplication.run(Application.class, args);
    }
}

这段代码就是SpringBoot项目的初始代码了,在项目启动时,就是执行了main方法中的run方法,我将添加权限的操作放在run()方法执行完之后,就可以解决问题了(刚开始的时候我以为这个main方法的运行时间应该就是当前项目的运行时间,当SpringBoot项目停止时,这个main方法才会执行完。后来证明这个想法是错误的,main方法是直接执行完毕,但项目会继续运行)

修改后的代码:

@SpringBootApplication
public class Application {

    public void static main(String[] args){

        SpringApplication.run(Application.class, args);
        //linux添加权限代码
        String[] cmd = new String[]{"chmod 777 .../*"};
        ExecuteComandUtils.execute(cmd);
    }
}

这样就能解决无法添加权限的问题了,但是具体是什么原因,以及网上的方法为什么失效,还有待深究。

你可能感兴趣的:(java学习,Linux)