Windows 7阻止java.io.File方法?

时间:2013-04-06 08:56:18

标签: java file windows-7

这是一个程序,它接收给定文件夹中的所有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离开资源管理器窗口加上转义,所以应该是正确的。

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

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

1 个答案:

答案 0 :(得分:0)

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

  1. 获取用户的文件夹,以便向运行该代码的用户授予“读取”权限,或者
  2. 使用UAC运行具有提升权限的代码(例如,从提升的命令提示符)。