当前位置: 代码迷 >> java >> 我可以在不使用Java中使用File对象的情况下将文件设置为只读吗?
  详细解决方案

我可以在不使用Java中使用File对象的情况下将文件设置为只读吗?

热度:46   发布时间:2023-07-17 20:56:50.0

我使用的系统具有内置功能,可通过将元数据标签添加到Jpeg图像。 该库允许直接通过InputStream修改元数据。 然后,由安装在最终用户计算机上的读取此元数据,以防止它们对带有标记文件(复制到闪存,其他存储设备,电子邮件等)进行可疑的事情。 问题在于,由于文件是可写的,因此用户仍然可以在事后修改标签,这几乎使安全工作无效。

我正在寻找一种方法,通过可以包裹InputStream的方式修改数据,从而以类似的方式为文件写入元数据以使其成为只读方式。

Java 对象具有一个称为setReadOnly()的内置方法,该方法在理论上可以使用,但是问题是我永远无法直接创建File对象。 我们从客户端收到一个InputStream,使用其他库对其进行修改,并在出于安全原因将其写入存储之前对其进行加密。 如果将标签添加到加密文件中,则在解密时将其删除。 Apache Commons Imaging支持许多元数据标记类型,但是我一直未能成功找到支持的任何R / W标记。

是否有人知道如何使用核心Java,Apache Commons Imaging或有用的第三方库直接通过InputStream或某些派生对象将File设置为持久性只读?

您只需使用 ProcessBuilder对文件进行chmod即可非常轻松地完成此操作。

就像是:

 
 
 
   
  
  
    String fileLoc = "/var/tmp/myImage.jpg"; String[] cmd = {"chmod", "0444", fileLoc}; ProcessBuilder pb = new ProcessBuilder(cmd); Process process = pb.start(); int error = process.waitFor(); if (error != 0){ //non 0 means something bad happend }
 
 
    

编辑:如果您不能将其作为文件访问,而只能将其作为流,则不能将其设置为只读,因为这是文件系统属性,并且文件中的任何内容都没有实际更改。

  相关解决方案