黑马程序员技术交流社区

标题: 获取文件的扩展名问题 [打印本页]

作者: 王月    时间: 2012-6-22 17:16
标题: 获取文件的扩展名问题
本帖最后由 王月 于 2012-6-26 16:23 编辑

怎么获取已知文件的扩展名。还有隐藏的扩展名怎么获取呢,比如123.doc.txt隐藏了扩展名后变成了123.doc。
大家帮帮忙了
作者: 钟成军    时间: 2012-6-22 17:25
获取已知文件名可以用正则表达式。隐藏就不知道了,同求高手!
作者: 薄炳鑫    时间: 2012-6-22 17:41
获取文件的扩展名用下面的方法,隐藏的也是同求。
public static String getEnd(String str)
        {
                int index = str.lastIndexOf(".");
                String end = str.substring(index);
                return end;
        }
作者: 杨康    时间: 2012-6-22 17:49
楼上正解
作者: 李盼    时间: 2012-6-22 17:54
楼上的楼上正解,就是获取最后出现 . 的角标值,然后从这个角标值作为起始点开始截取后面的子串!
作者: 黑马_张佳超    时间: 2012-6-22 18:18
  1. public class Test {
  2.           public static void main(String[] args) {
  3.                  
  4.              File dir  = new File("");
  5.              String dirString = dir.getAbsolutePath();
  6.              //System.out.println(dirString);
  7.              //Filter filter = new Filter(".java");
  8.              dir = new File(dirString);
  9.              File [] fls = dir.listFiles();
  10.              for(int i = 0 ; i < fls.length ; i++){
  11.                      if(fls[i].getName().contains(".")){
  12.                              String exName = fls[i].getName().substring(fls[i].getName().lastIndexOf("."), fls[i].getName().length());
  13.                              System.out.println(exName);
  14.                      }
  15.              }
  16. //             File[] files=dir.listFiles(filter);
  17. //             for(int i=0;i<files.length;i++){
  18. //                       System.out.println(files[i].getName());
  19. //             }
  20.          }
  21. }
复制代码
上边代码是获得某个文件目录下所有文件类型的扩展名称。
如果是获取指定文件的扩展名称,通过调用File的getName()方法获取完整文件名称,然后通过String的subString()方法截取指定文件的扩展名称
即:
File file = new File("abc.txt");
fileName = file.getName();
String exName = fileName.substring(fileName.lastIndexOf("."), fileName.length());
至于隐藏文件扩展名称的文件如何获取扩展名称请高人赐教。
作者: 王月    时间: 2012-6-22 19:22
薄炳鑫 发表于 2012-6-22 17:41
获取文件的扩展名用下面的方法,隐藏的也是同求。
public static String getEnd(String str)
        {

貌似不能获取隐藏扩展名文件的扩展名吧
作者: 王月    时间: 2012-6-22 19:25
黑马_张佳超 发表于 2012-6-22 18:18
上边代码是获得某个文件目录下所有文件类型的扩展名称。
如果是获取指定文件的扩展名称,通过调用File的get ...

这个确实可以,可以获得所有文件的扩展名,就是不知道隐藏的到底怎么得到
作者: 黑马_张佳超    时间: 2012-6-22 22:51
  1. public class WriteADocFileToTxt {
  2.         public static void main(String[] args)throws Exception {
  3.                 File fileFrom = new File("abc");//源文件为doc文档,abc为去掉扩展名后的名称 即:abc.doc --> abc
  4.                 FileInputStream fis = new FileInputStream(fileFrom);//文件输入流
  5.                 byte [] b = new byte[6];
  6.                 fis.read(b);//将源文件读入到流中 ,byte数组为6,这个是经过测试得出得结论,doc类型的文件前6个字节的文件结构都是一样的
  7.                                         //其他类型的文件结构需要具体分析。这里只做了doc文件的处理。
  8.                 String fileType = getFileType(b);
  9.                 if(!"".equals(fileType))
  10.                         System.out.println(fileFrom.getName() +"是:" + fileType+"类型文件");
  11.                 else
  12.                         System.out.println(fileFrom.getName() +"是:" + "txt类型文件");
  13.                 fis.close();
  14.         }
  15.         /*
  16.          * 操作过程:先在磁盘下的某一目录存放准确类型的文件。例如:d:\files\test.doc文件
  17.          *                         然后通过文件输入流将目录下的文件读入到byte数组中,同时跟方法中的参数进行比较。byte数组中的数据与参数的byte数组匹配,
  18.          *                         说明当前文件类型就是去掉扩展名称文件的文件类型。
  19.          * */
  20.         private static String getFileType(byte [] b) throws Exception {
  21.                 File fileSource = new File("d:\\files");
  22.                 FileInputStream fis ;
  23.                 File [] files = fileSource.listFiles();
  24.                 byte [] byteSource = new byte[6];
  25.                 for(int i = 0 ; i < files.length; i++){
  26.                         fis = new FileInputStream(files[i]);
  27.                         fis.read(byteSource);
  28.                         if(new String(byteSource).equals(new String(b)))
  29.                                 return getExName((files[i].getName()));
  30.                 }
  31.                 return "";
  32.         }
  33.         private static String getExName(String fileName){
  34.                 return fileName.substring(fileName.lastIndexOf(".")+1);
  35.         }
  36. }
复制代码
实现的方法比较原始,望高手点拨
作者: 罗文杰    时间: 2012-6-23 15:33
{:soso_e127:}其实文件的拓展名是不是隐藏的都没有关系,获取方法完全一样,得到的都是文件的带有拓展名的名称。代码我就不贴了,楼主你可以做下实验。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2