我很难更改现有文件的权限。我想要做的是,编组 xml 并将其写入文件。因为应用程序在“root”帐户下运行,所以该文件归 root 所有。我想更改此文件的权限,以便其他用户可以 SFTP 此文件。
这是我的第一个代码:
File file = new File(Constant.fileName);
context = JAXBContext.newInstance(RateGroups.class);
Marshaller marshaller = context.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.setProperty("jaxb.formatted.output",Boolean.TRUE);
marshaller.marshal(rateGroups, file);
marshaller.marshal(rateGroups,System.out);
如果我运行上面的代码,文件写入成功,但我不能使用其他帐户进行 SFTP(权限被拒绝)。然后我添加此代码来更改文件的权限:
file.setWritable(true,false);
file.setExecutable(true,false);
file.setReadable(true,false);
权限已更改,但文件大小也变为零 (0)。请告诉我如何更改它的权限或者如果可能的话更改所有者?谢谢你。
更新 1
编写文件后,我调用我的 sftp 类:
SFTPFile sftpFile = new SFTPFile();
error = sftpFile.execute(Constant.rateGroupxml);
这是 SFTPFile 类中的代码:
public int execute(String fileName){
JSch jsch = new JSch();
Session session = null;
int result = 0;
String localPath = Constant.path + "/report/" + fileName;
//try {
try {
session = jsch.getSession(Constant.user1, Constant.IP1, 22);
session.setConfig("StrictHostKeyChecking", "no");
session.setPassword(Constant.pass1);
session.connect();
System.out.println("session: " + session.getUserName());
Channel channel = session.openChannel("sftp");
channel.connect();
ChannelSftp sftpChannel = (ChannelSftp) channel;
sftpChannel.cd(Constant.pathDestination);
sftpChannel.put(localPath);
sftpChannel.exit();
session.disconnect();
result = 0;
} catch (SftpException ex) {
Logger.getLogger(SFTPFile.class.getName()).log(Level.SEVERE, null, ex);
result = 1;
} catch (JSchException ex) {
Logger.getLogger(SFTPFile.class.getName()).log(Level.SEVERE, null, ex);
result = 2;
}
return result;