2017-02-03 5 views
0

У меня есть несколько папок/файлов в последних элементах windows.что я хочу сделать, это то, что я хочу знать реальный путь ко всем файлам/папкам .lnk ярлыков, присутствующих в последних элементах. Я хочу результат вот так. Локальный путь: C: \ Program Files (x86) \ Windows Live \ Почта \ wlmail.exeуправляющие метаданные о файлах .lnk

Мой код дается

/* 
* 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

Попробуйте внутри цикл:

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

Be известно: этот метод получит доступ к ярлыкам через Windows API, который будет иметь тот же результат, что и вы дважды щелкаете по нему. Поэтому для каждой отдельной неработающей ссылки Windows покажет вам всплывающее сообщение с просьбой либо перейти к текущему местоположению файла, либо удалить неработающую ссылку. Это «быстрое решение &», которое должно работать на вас. Если вы хотите получить более сложный код, посмотрите на этот ответ:

https://stackoverflow.com/a/9403438/3830952

Смежные вопросы