0

这是一个程序,它获取给定文件夹中的所有 PDF 文件,然后添加日期前缀并过滤掉所有变音符号。这适用于我的 Win XP 安装,但不适用于新的 Win7 安装,其中完全相同的代码由于replaceSymbolsInDir(String)第 4 行中的 nullPointerException 而终止,这是 for 循环之前的空行。

我通过在 Eclipse 中编译它来触发该过程:

import java.io.File;

public class loadFile {


public static String dir = "C:\\Users\\UserName\\Desktop\\PdfDirectory\\";
public static String date = "130406";

public static void main(String args[]) {

        replaceSymbolsInDir(dir);
        addPrefix(dir, date + "-");         
}


public static void replaceSymbolsInDir(String path){

    File folder = new File(path);
    File[] fileArray = folder.listFiles();

    for(int i = 0; i<fileArray.length; i++) {
        File currentFile = fileArray[i];
        if(currentFile.getName().toLowerCase().endsWith(".pdf")) {
            currentFile.renameTo(new File(path, replaceSymbolsInString(currentFile.getName())));
        }
    }
}

public static String replaceSymbolsInString(String s) {
    //figure out regex
    String result = s.replace('ä','a');
    result = result.replace('ö','o');
    result = result.replace('ü','u');
    result = result.replace('ß','s');
    result = result.replace(' ','-'); 
    return result;
}

public static void addPrefix(String path, String prefix) {

    File folder = new File(path);
    File fileArray[] = folder.listFiles();

    for(int i = 0; i<fileArray.length; i++) {

        File currentFile = fileArray[i];
        if(!currentFile.getName().startsWith(prefix) && currentFile.getName().toLowerCase().endsWith(".pdf")) {
            String newName = prefix + "" + currentFile.getName();
            currentFile.renameTo(new File(path, newName));
        }
    }
}
}

win7 是否会阻止尝试查找有关文件和文件夹的信息的方法?这好像是

folder.listFiles();

即将为空,这就是问题所在。

除了路径错误之外的任何想法?因为这是浏览器窗口外的 ctrl+c/v 加上转义,因此应该是正确的。

编辑:我在唯一现有的用户帐户上运行程序,帐户管理窗口将其标记为“管理员”。在以管理员身份打开 cmd 后从 cmd 运行也会产生 NPE。

Edit2:如前所述,该文件夹默认为写保护且无法更改,这似乎是根本原因。我会调查一下...

4

1 回答 1

0

默认情况下,Windows 7 不允许一个用户读取另一用户目录中的文件或文件夹,而 Windows XP 则允许。您需要做以下两件事之一:

  1. 获取其文件夹的用户,以向运行代码的用户授予“读取”权限,或
  2. 使用 UAC 以提升的权限(例如从提升的命令提示符)运行代码。
于 2013-04-06T09:09:49.610 回答