黑马程序员技术交流社区

标题: String[] list() 和 File[] listFiles()区别 [打印本页]

作者: 田宇鹤    时间: 2012-11-28 12:00
标题: String[] list() 和 File[] listFiles()区别
//        public static void main(String[] args) {
//                File f = new File("e:\\");
//                File []f1 = f.listFiles();
//                for(File s: f1) {
//                        if(s.isFile()) {
//                                if(s.getName().endsWith(".mp3")) {
//                                        System.out.println(s.getName());
//               
//                                }
//                        }
//                        //System.out.println(f2);
//                }
//        }
//}

这个可以运行  

        public static void main(String []args) {
                File f = new File("e:\\");
               
                String []str = f.list();             
                for(String s: str) {
                        if(s.isFile()) {
                                if(s.getName().endsWith(".Mp3")) {
                                        System.out.println(s.);
                                }
                        }
                        //System.out.println(s);
                }
        }
}
而这个不可以啊  


作者: 黑马-王宁    时间: 2012-11-28 12:14
String[] list()和 File[] listFiles()的区别:

      String[] list()这个方法返回的是当前目录下的文件以及文件夹名称,他只有名称

      File[] listFiles() 这个方法往回返的是当前目录下的文件以及文件夹的对象, 这里边得到的是对象我们可以通过getName()获得名称也可以getPath获取路径,在开发用这个比较好,里边的信息都能获得到。

递归思想:

       因为目录中还有目录,只要使用同一个列出目录功能的函数完成即可。在列出过程中出现的还是目录的话,还可以再次调用本功能。也就是函数自身调用自身。这种表现形式,或者编程手法,称为递归。

递归要注意:

1,限定条件。

2,要注意递归的次数。尽量避免内存溢出。

class File

{

      public static void main(String[] args)

      {

           要注意的是:递归的话必须在这里建立对象。

           File dir= new File("D:\\myjava");

           int num = getSum(100);如果这里等于一万就内存溢出。因为栈内存满了

           System.out.println("num="+num);

      }

      public static int getSum(int num)

      {

           if (num==1)

                 return 1;

           return num+getSum(num-1);

      }

}

主函数调用 showA();   这就是递归

void showA()

{

      showB();

      System.out.println("A");

}

void showB()

{

      showC();

      System.out.println("B");

}

void showC()

{

      System.out.println("C");

}

Properties

      Properties是hashtable的子类。也就是说它具备map集合的特点。而且它里面存储的键值对都是字符串。不需要泛型。是集合中和IO技术相结合的集合容器。该对象的特点:可以用于键值对形式的配置文件。那么在加载数据时,需要数据有固定格式:键=值。

        凡是文档中前边加井号的都是注释信息不会被Properties加载。Properties加载的信息必须是键值对。

能够读取对象的读写流

用了ObjectOutputStream就必须用ObjectInputStream 读出来他们俩要成对出现,这可以直接对对象进行读写。

这个对象必须被序列化。静态是不能被序列化的。

ObjectOutputStreamoos = new ObjectOutputStream(new FileOutputStream("obj.txt"));

           oos.writeObject(newPerson("lisi",30));把对象写入到硬盘上,是数据持久化

ObjectInputStreamois = new ObjectInputStream(new FileInputStream("obj.txt"));

           Person p = (Person)ois.readObject();从硬盘上读取对象,并取出对象,很方便

           System.out.println(p);

他们俩要成对出现,用了ObjectOutputStream 就必须用ObjectInputStream 读出来

随即读写流:

     随机读取访问,优点是可以分段读写数据。

      raf.seek();调整对象中的指针位置来进行指定的数据读取和写入,数据分段用处很大。

      RandomAccessFileraf = new RandomAccessFile("ran.txt","r");

     该类不是算是IO体系中子类。而是直接继承自Object。但是它是IO包中成员。因为它具备读和写功能。内部封装了一个数组,而且通过指针对数组的元素进行操作。可以通过getFilePointer获取指针位置,同时可以通过seek改变指针的位置。其实完成读写的原理就是内部封装了字节输入流和输出流。



用于操作字节数组的流对象。

       ByteArrayInputStream :在构造的时候,需要接收数据源,。而且数据源是一个字节数组。

       ByteArrayOutputStream:在构造的时候,不用定义数据目的,因为该对象中已经内部封装了可变长度的字节数组。

数据源

     ByteArrayInputStream bis = newByteArrayInputStream("美女".getBytes());

数据目的   发现源和目的都在内存中

      ByteArrayOutputStream bos = newByteArrayOutputStream();

可以用于操作基本数据类型的数据的流对象:DataInputStream与DataOutputStream

      DataInputStreamdis = new DataInputStream(new FileInputStream("abcd.txt"));

      DataOutputStreamdos = new DataOutputStream(new FileOutputStream("utfdate.txt"));

      这里边有操作基本数据类型的功能读Int写Int等等,那么他的作用在于,把基本数据类型和流相结合,他能操作基本数据类型,所以构造函数要传递一个流进来。要传字节流因为Data* 他是字节流的小弟。

编码:字符串变成字节数组

解码:字节数组变成字符串

String -->byte[]: str.getBytes();指定编码表str.getBytes(charsetName);

byte[] -->String: new String(byte[]);指定编码表new String(byte[],charsetName); new一个对象就行了

      知识点:当用GBK或者UTF-8编码,而用ISO8859-1解码失败的时候,是可以通过重新对失败的文件进行在进行编码,之后再解码一次就OK了。

      但是当用GBK或者UTF-8编码,而用UTF-8或者Gbk解码失败的时候,不能通过重新对失败的文件进行在进行编码,因为这两种编码集都识别中文。utf-8和gbk都识别中文,但是同一个中文在这两个表中的代表的编码是不一样的,gbk编码是两个字节代表一个字。u8编码是三个字节代表一个字。

作者: 坚持远方    时间: 2012-11-28 12:16
        File f = new File("e:\\");
                 
                String []str = f.list();              
                for(String s: str) {
                         if(s.isFile()) {//这里的s是个String类型的,所以不能调用isFile方法
                                 if(s.getName().endsWith(".Mp3")) {//s也不能调用getName方法
                                         System.out.println(s.);
                                 }
                        }
                         //System.out.println(s);
                 }
         }
而你的第一种方式用filelist返回的是file类型的数组
而这个返回的是string类型的数组
作者: 王中利    时间: 2012-11-28 19:27
public static void main(String []args) {
                 File f = new File("e:\\");
                 
                String []str = f.list();              
                for(String s: str) {
                         if(s.isFile()) {
                                 if(s.getName().endsWith(".Mp3")) {
                                         System.out.println(s.);//这里有个错误,多了一个点。
                                 }
                        }
                         //System.out.println(s);
                 }
         }
}
作者: wxlz520    时间: 2012-11-30 22:28
public static void main(String []args) {
                File f = new File("e:\\");
               
                String []str = f.list();              
                for(String s: str) {
                        if(s.isFile()) {//错误1:str是一个字符串数组,遍历出来的file路径也是字符串,而不是一个file类型的抽象路径,既然不是路径怎么去判断它是否是一个标准文件呢?错误2:s是一个字符串,string类中是没有isfile()的方法的。所以编译都无法通过!
                                if(s.getName().endsWith(".Mp3")) {
                                        System.out.println(s.);
                                }
                        }
                        //System.out.println(s);
                }
        }
}





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