0

我想用代码在windows中创建快捷方式,我在这里使用库:http://alumnus.caltech.edu/~jimmc/jshortcut/jshortcut/README.html 还有 相应的代码:

import net.jimmc.jshortcut.JShellLink;
public class remove {
public static void main(String[] args) throws Exception{
    String path = new String ("/home/test.csv");
    readAndDelete(path, true, StandardCharsets.UTF_8);
}

private static void readAndDelete(String path, boolean ignoreHeader,Charset encoding) throws IOException {
    File file = new File(path);
    CSVParser parser = CSVParser.parse(file, encoding,CSVFormat.DEFAULT.withHeader());
    List<CSVRecord> records = parser.getRecords();
    List<String> docRecord = new ArrayList<String>();
    List<String> shortpath = new ArrayList<String>();
    for (CSVRecord doctype : records){
         docRecord.add(doctype.get(0).toString());
         shortpath.add(doctype.get(1).toString());
    }
    int recordlength = docRecord.size();
    for(String eachdocRecord:docRecord){
        try {
            Path pathtemp=Paths.get(eachdocRecord);
            Files.delete(pathtemp);
        } catch (NoSuchFileException x) {
            System.err.format("%s: no such" + " file or directory%n", path);
        } catch (DirectoryNotEmptyException x) {
            System.err.format("%s not empty%n", path);
        } catch (IOException x) {
            // File permission problems are caught here.
            System.err.println(x);
        }
    }
    for(int i=0; i<recordlength; i++){
         JShellLink link = new JShellLink();
         String pointpath=shortpath.get(i);
         String originalpath = docRecord.get(i);
         String[] parts = pointpath.split("\\\\");
         int partssize= parts.length;
         String name=parts[partssize-1];
         String[] originalparts = originalpath.split("\\\\");
         int originalsize = originalparts.length;
         int lastlength = originalparts[originalsize-1].length();
         String foldername = originalpath.substring(0,originalpath.length()-lastlength);
         link.setFolder(foldername);
         link.setName(name);
         link.setPath(pointpath);
         link.save();
     }
 }
}

我在 Windows 命令提示符下运行它,但总是异常:

 Exception in thread "main" java.lang.NoClassDefFoundError:net/jimmc/jshortcut/JShellLink

我成功编译了.class ...任何人都可以保存nme ...非常感谢

4

1 回答 1

1

不管其他任何可能出错的地方(我没有阅读整个代码),异常都非常清楚 - JShellLink 不在您的类路径中。如何做到最好取决于您的用例 - 自述文件建议在构建到 .jar 时编辑清单文件,也应该可以使用 Maven 来处理它,并且任何 IDE 都应该能够处理类路径你。据我所知,您的用例看起来像

javac remove.java
java remove

(顺便说一句,类名和类文件名应该以大写开头,这是标准)

在这种情况下,最简单的方法是使用:

java -cp .;jshortcut.jar remove

我们添加当前目录(由于 JShortcut 想要在类路径上拥有它的 dll,只是为了确定)以及包含您使用的类的 jar 到类路径。如果您使用的是 Unix 系统,请:使用;.

于 2015-08-14T15:17:54.873 回答