从Java Web应用程序访问Linux本地文件系统

我们在一个web应用程序里面使用了一个java库,它是在Apache服务器中托pipe的.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应用程序访问本地文件系统? 如果是,那么是否有必须设置的访问权限?

Solutions Collecting From Web of "从Java Web应用程序访问Linux本地文件系统"

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

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

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

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

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

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

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

编辑:如果你想访问客户端的文件系统,那么这不能直接从你的服务器上运行的Web应用程序。 这当然需要从运行在客户端上的代码完成,因为“标准”Web应用程序将在客户端上具有Javascript和(X)HTML,所以您将不得不在客户端上运行更多的细节。 ,而不是java。