使用 lib JShortcut 在 java 中创建快捷方式
create shortcuts in java with lib JShortcut
我想用代码在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 ...非常感谢
不管其他任何可能出错的地方(我没有阅读整个代码),异常情况很明显 - JShellLink 不在您的 class 路径中。如何做到最好取决于您的用例——README 建议在构建 .jar 时编辑 Manifest 文件,也应该可以使用 Maven 来处理这个问题,任何 IDE 都应该能够处理照顾 class 路径给你。据我所知,您的用例看起来像
javac remove.java
java remove
(顺便说一下,class 名称和 class 文件名应该以大写开头,这是标准)
在这种情况下,最简单的方法是使用:
java -cp .;jshortcut.jar remove
我们添加当前目录(由于 JShortcut 希望将它的 dll 放在 classpath 上,只是为了确定)以及包含 classes 的 jar,你使用到 class路径。如果您使用的是 Unix 系统,请使用 :
而不是 ;
.
我想用代码在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 ...非常感谢
不管其他任何可能出错的地方(我没有阅读整个代码),异常情况很明显 - JShellLink 不在您的 class 路径中。如何做到最好取决于您的用例——README 建议在构建 .jar 时编辑 Manifest 文件,也应该可以使用 Maven 来处理这个问题,任何 IDE 都应该能够处理照顾 class 路径给你。据我所知,您的用例看起来像
javac remove.java
java remove
(顺便说一下,class 名称和 class 文件名应该以大写开头,这是标准)
在这种情况下,最简单的方法是使用:
java -cp .;jshortcut.jar remove
我们添加当前目录(由于 JShortcut 希望将它的 dll 放在 classpath 上,只是为了确定)以及包含 classes 的 jar,你使用到 class路径。如果您使用的是 Unix 系统,请使用 :
而不是 ;
.