这是一个程序,它接收给定文件夹中的所有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:如前所述,该文件夹默认为写保护且无法更改,这似乎是根本原因。我会调查一下......
答案 0 :(得分:0)
Windows 7不允许一个用户默认读取另一个用户目录中的文件或文件夹,而Windows XP则允许。你需要做两件事之一: