从java Web应用程序访问linux本地文件系统

das*_*n89 2 java linux web-applications static-libraries file-access

我们在一个web应用程序里面使用一个java库,它托管在apache server.ReadConfFile方法库中,返回文件找不到错误.方法如下

public byte[] ReadConfFile()
{
    try
    {
        File file = new File("/home/product/api/conf.txt");
        if(!file.exists())
            return "file not found".getBytes();
        byte[] buf = new byte[(int) file.length()];

        FileInputStream fis = new FileInputStream(file);
        fis.read(buf);
        return buf;
    } catch (IOException e)
    {
        e.printStackTrace();
        return null;
    }
}
Run Code Online (Sandbox Code Playgroud)

是否允许从Web应用程序访问本地文件系统?如果是,那么是否有必须设置的访问权限?

Mat*_*ias 9

要快速回答您的问题:您可以从Web应用程序访问文件系统,但是您必须检查应用程序服务器/ Web容器以了解如何配置SecurityManager(如果已安装).

但是,您阅读文件的方法存在严重问题,您应该解决这个问题:

  1. 不检查if(!file.exists())更好的检查if(!file.isFile()).如果文件是目录,则第一个检查也返回true.

  2. 如果没有文件,最好不要返回String,抛出异常,或加载一些默认配置或执行其他有用的操作.

  3. 您阅读文件的逻辑非常糟糕.如果read函数返回不同数量的可用字节(可能是读取的块),则会得到损坏的结果.

  4. 您不会在finally块中关闭流,(如果您使用的是Java 7,请使用资源尝试).

  5. 异常处理也不好.打印堆栈跟踪不好,记录它会更好.处理异常将是最好的(抛出异常,或切换到某些默认配置,就像文件不在那里时).

编辑:如果要访问客户端的文件系统,则无法通过服务器上直接运行的Web应用程序进行此操作.这当然必须通过客户端上运行的代码完成,您必须填写有关客户端上运行的内容的更多详细信息,因为"标准"Web应用程序将在客户端上具有Javascript和(X)HTML不是java.