2012-10-05 84 views
2

我想知道,如果是有可能從ZipEntry獲得簡單的名稱...如何獲取ZipEntry的簡單名稱?

當我調用輸入的getName(),我得到一個全路徑名。

我只需要得到文件的名稱。

在這裏,我需要得到簡單的名字,而不是全名和它的根。

public class ZipFileSample { 

    public static void main(String[] args) { 

     try { 
      ZipFile zip = new ZipFile(new File("C:\\Users\\Levi\\Desktop\\jessica.zip")); 

      for (Enumeration e = zip.entries(); e.hasMoreElements();) { 
       ZipEntry entry = (ZipEntry) e.nextElement(); 
       //Here I need to get the simple name instead the full name with its root 
       System.out.println(entry.getName()); 
      } 

     } catch (ZipException e) { 
      e.printStackTrace(); 

     } catch (IOException e) { 
      e.printStackTrace(); 

     } 

    } 
} 

回答

4

如何

new File(entry.getName()).getName() 
+0

感謝njzk2,該工程確定,唯一的問題是,我需要創建一個新文件(),以達到預期的效果,但讓前進。 –

+1

你實際上並沒有創建一個文件,你創建了一個代表文件的對象。確切地說,並不需要底層的實際文件 – njzk2

+0

,這就是我的意思。謝謝。 –

1

你可以用下面的代碼嘗試(可能是你需要採取一些預防措施對java.lang.StringIndexOutOfBoundsException)。你也可以強制執行一些檢查,如果你知道分機

 try { 
      ZipFile zip = new ZipFile(new File("F:\\OTHERS\\classes.zip")); 
      for (Enumeration e = zip.entries(); e.hasMoreElements();) { 
       ZipEntry entry = (ZipEntry) e.nextElement(); 
       //Here I need to get the simple name instead the full name with its root 
       String name =entry.getName(); 
       //if(name.endsWith(".java")) 
//    { 
        name = name.substring(name.lastIndexOf("/")+1,name.length()); 
        System.out.println(name); 
//    } 
      } 

     } catch (ZipException e) { 
      e.printStackTrace(); 

     } catch (IOException e) { 
      e.printStackTrace(); 

     } 
+0

要加起來,上面的邏輯只會打印文件名,而不是文件夾名。 –

+0

你確定目錄分隔符是/?有可能是一個文件名包含一個/? – njzk2

+0

而不是'/',我們可以使用File.separator。文件名永遠不會包含'/',所以你會得到完整的文件名。如果名稱不包含任何分隔符,lastIndex(「/」)返回-1,所以有效操作是substring(0,length) –