繁体   English   中英

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

[英]Accessing linux local file system from java web application

我们在托管在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 应用程序访问本地文件系统? 如果是,那么是否需要设置任何访问权限?

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

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

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

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

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

  4. 您不要在 finally 块中关闭流(或者,如果您使用的是 Java 7,请使用 try 与资源)。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM