【问题标题】:Reading a directory returns null when deployed on the apache tomcat 7.0 server在 apache tomcat 7.0 服务器上部署时读取目录返回 null
【发布时间】:2013-09-05 20:33:48
【问题描述】:

我正在尝试读取网络上的文件夹并检索 txt 文件列表。 在 Eclipse 中本地测试它时,它工作正常,但是每当我将它部署在 Apache Tomcat 7 服务器上时,它都会返回 null。

这似乎不是访问权限问题,因为服务器可以访问我尝试浏览的文件夹。 我不确定那里出了什么问题,是我需要更改的服务器上的设置还是其他什么?

private List<File> readDirectory() {
    File test = new File(envMap.get(database));
    List<File> files = new ArrayList<File>();
    try {
        files = FileListing.getFileListing(test);
    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    List<File> txtFiles = new ArrayList<File>();
    if (files != null) {
        for (File file : files) {
            if (file.isFile() && file.getName().endsWith(".txt")) {
                txtFiles.add(file);
            }
        }
    }
    return txtFiles;
}

我将这个http://www.javapractices.com/topic/TopicAction.do?Id=68 用于FileListing.getFileListing

仔细检查后发现我收到了FileNotFoundException: Directory does not exist。该目录确实存在并且服务器对其具有访问权限,所以我不太确定该怎么做。

【问题讨论】:

  • null 是哪一部分? FileListing.getFileListing(test);?
  • 是的。之后 List 文件为空。它在 Eclipse 中运行良好,所以我认为该功能没有问题。
  • 那么你必须向我们展示它是如何实现的。此外,最初将其初始化为 = new ArrayList&lt;File&gt;(); 也是没有意义的,因为您正在重新分配它。
  • 它会抛出 FileNotFound 异常吗?
  • 本地 Eclipse 设置和 Tomcat 服务器机器之间的操作系统有何不同?

标签: java eclipse tomcat


【解决方案1】:

files 不能是 null。您的代码使用

static private List<File> getFileListingNoSort(File aStartingDir) throws FileNotFoundException {
    List<File> result = new ArrayList<File>();
    File[] filesAndDirs = aStartingDir.listFiles(); // may return null
    List<File> filesDirs = Arrays.asList(filesAndDirs); // would throw NPE
    for(File file : filesDirs) {
        result.add(file); 
        if (!file.isFile()) {
            //must be a directory               
            List<File> deeperList = getFileListingNoSort(file);
            result.addAll(deeperList);
        }
    }
    return result;
}

您确定向我们展示了正确的代码吗?

【讨论】:

  • @Emualynk 我将删除我的答案,但您绝对应该调试代码并检查 null 的来源。
  • 有没有办法在服务器(而不是 Eclipse)上运行 Java 控制台时访问它?
  • @Emualynk 是啊,看看stackoverflow.com/questions/975271/…
  • 在检查后确实会抛出 FileNotFoundException 异常:"Directory does not exist: " + aDirectory
【解决方案2】:

找出问题所在,结果发现默认情况下 Apache 在没有网络访问权限的本地系统帐户下运行。将其更改为具有网络访问权限的另一个帐户可以解决问题。

来源:http://blog.mattwoodward.com/2010/08/accessing-network-drive-from-apache-and.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-14
    • 2012-07-10
    • 2018-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-13
    • 2017-10-15
    相关资源
    最近更新 更多