黑马程序员技术交流社区

标题: 新人求教 File.getName() 如何调用出来 [打印本页]

作者: 200米王朝    时间: 2014-5-24 12:10
标题: 新人求教 File.getName() 如何调用出来
本帖最后由 200米王朝 于 2014-5-26 10:54 编辑

需求是:获取一个文件名的全名(文件名+扩展名)

只用了 import java.io.File; 调用该方法 (不知道对不对,或者调用的不全)

后面使用 xxx.getName() 的时候提示 "没有为类型 String 定义方法 getName()"


作者: 200米王朝    时间: 2014-5-24 12:18
本帖最后由 200米王朝 于 2014-5-24 12:19 编辑

import java.io.File;
public class Text7 {

        public static void main(String[] args)
        {
                String FileName = new String("黑马万岁.exe");
                System.out.println( "文件名是:"+FileName+"...扩展名是:"+getSuffixName(FileName) );
        }
        
        public static String getSuffixName(String FileName)
        {
                String FullName = new String(FileName.getName());
                String SuffixName = FullName.substring(FullName.lastIndexOf(',') + 1);
                return SuffixName;
        }
}

这是代码
红色那里出问题了,提示 没有为类型 String 定义方法 getName()


请指点迷津.



作者: skill20    时间: 2014-5-24 18:17
File 有getAbsolutePath() 和 getName()方法。
作者: e10my    时间: 2014-5-24 19:03
  1. import java.io.File;
  2. public class Test7 {

  3.          public static void main(String[] args)
  4.          {
  5.                  File FileName = new File("黑马万岁.exe");
  6.                  System.out.println( "文件名是:"+FileName+"...扩展名是:"+getSuffixName(FileName) );
  7.          }
  8.          
  9.          public static String getSuffixName(File FileName1)
  10.          {
  11.                  String FullName = new String(FileName1.getName());
  12.                  String SuffixName = FullName.substring(FullName.lastIndexOf(',') + 1);
  13.                  return SuffixName;
  14.          }
  15. }
复制代码


正如楼上所说
File 有getAbsolutePath() 和 getName()方法。

而你定义的是String  所有没有getName()方法

作者: 七弦    时间: 2014-5-24 20:51
本帖最后由 七弦 于 2014-5-24 20:55 编辑

System.out.println( "文件名是:"+FileName+"...扩展名是:"+getSuffixName(FileName) );
你这么打印是要打印文件名和扩展名吧?
其实用String类的split方法切割就行了,还以为你封装的File对象呢:L

//  String FileName = new String("黑马万岁.exe");
这个其实这样写更简单:String FileName = "黑马万岁.exe";
而且因为new的话在内存中会有两个对象,按我的想法应该是后者稍微优化一点内存的,反正怎样定义都行,

继续讲,因为是用点切割所以要用到正则的知识点,因为这个点比较特殊,要转译一下,这样切:

String[] buf = FileName.spelt("\\.");   //最好不要存成后面这样的文件名(abc.txt.java.exe)

StringBuilder sb = new StringBuilder();  //还是防止一下那种文件名吧

for(int x=0; x<buf.length-1; x++){
  sb.append(buf[x]+".");  //因为点被切割掉了还要补上
}

System.out.println( "文件名是:"+sb.toString()+"...扩展名是:"+buf[buf.length-1]);

ok了!
作者: 七弦    时间: 2014-5-24 21:15
哎呦我去,刚看到你导了File包!
按你的方法再写一次吧。。。
还有你那那行代码不是String!!!是File!!!

import java.io.File;
public class Text7 {

        public static void main(String[] args)
        {
                File fileName = new File("黑马万岁.exe");     // 注意这行代码!!
                System.out.println( getInfo(fileName) );
        }
        
        public static String getInfo(File fileName)   //只要传进来一个File对象,此方法就能返回文件名和后缀名(还按楼主的格式来)
        {

                String[] buf = fileName.getName().split("\\.");    //合并成一步了,应该能看懂吧


                StringBuilder sb = new StringBuilder();


                for(int x=0; x<buf.length-1; x++){
                        sb.append(buf[x]+".");              //之所以用循环还存入容器是因为可能有这种多个点文件:(abc.sss.df.exe)
                }                                           //当然用lastIndexOf反向索引也是ok的!能完美的避开这种文件名的情况,这里我就不用了。
               
                return  "文件名是:"+sb.toString()+"...扩展名是:"+buf[buf.length-1];
        }
}



作者: 200米王朝    时间: 2014-5-25 17:08
谢谢各位的答案!




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