我在Windows的最近项目中有一些文件夹/文件。我想要做的是我想知道最近项目中存在的.lnk快捷方式的所有文件/文件夹的真实路径。我想要这样的结果。 本地路径:C:\ Program Files(x86)\ Windows Live \ Mail \ wlmail.exe
我的代码是
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package sir.aimal;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.LinkOption;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.attribute.BasicFileAttributeView;
import java.nio.file.attribute.BasicFileAttributes;
import java.nio.file.attribute.FileTime;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
*
* @author zeeshan
*/
public class SirAimal
{
public static void main(String[] args) throws IOException
{
String user=System.getProperty("user.name");
String path="C:\\Users\\"+user+"\\AppData\\Roaming\\Microsoft\\Windows\\Recent\\";
File directory = new File(path);
File[] fList = directory.listFiles();
for (int i=0;i<fList.length;i++)
{
String filename=fList[i].getName();
String actualfilename=filename.replace(".lnk", "");
Path p = Paths.get(path+filename);
BasicFileAttributes view= Files.getFileAttributeView(p, BasicFileAttributeView.class).readAttributes();
FileTime fileTime=view.creationTime();
System.out.println(actualfilename+"\t\t"+new SimpleDateFormat("dd/MM/yyyy HH:mm:ss").format((fileTime.toMillis())));
}
}
}
答案 0 :(得分:0)
在for循环中尝试:
ShellFolder sf = ShellFolder.getShellFolder(flist[i]);
ShellFolder target = sf.getLinkLocation();
if (target != null) {
System.out.println(target.getAbsolutePath());
}
以下是该课程的一些文档:
http://srcrr.com/java/oracle/openjdk/6/reference/sun/awt/shell/ShellFolder.html
请注意:此方法将通过Windows API访问快捷方式,这与双击时的结果相同。因此,对于每个单独的断开链接,Windows将向您显示一条弹出消息,要求您浏览到该文件的当前位置或删除损坏的链接。这是&#39;快速&amp;讨厌的&#39;解决方案,应该适合你。如果您想要更复杂的代码,请查看以下答案: