2012-10-05 61 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) –