2

我们在托管在apache服务器中的Web应用程序中使用Java库。库中的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;
    }
}

是否允许从 Web 应用程序访问本地文件系统?如果是,那么是否需要设置任何访问权限?

4

1 回答 1

9

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

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

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

  2. 如果没有文件,最好不要返回字符串,抛出异常,或加载一些默认配置或做其他有用的事情。

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

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

  5. 异常处理也不好。打印堆栈跟踪不好,记录它会更好。最好处理异常(抛出异常,或切换到某些默认配置,例如文件不存在时)。

编辑:如果您想访问客户端的文件系统,那么这不能从您直接在服务器上运行的 Web 应用程序中完成。这当然必须通过客户端上运行的代码来完成,并且您必须填写有关客户端上运行的内容的更多详细信息,因为“标准”Web 应用程序将在客户端上具有 Javascript 和 (X)HTML ,而不是Java。

于 2013-11-14T07:56:20.797 回答