黑马程序员_File类

来源:互联网 发布:仿273二手车网站源码 编辑:程序博客网 时间:2024/04/29 18:11

 

---------------------- android培训、java培训、期待与您交流! ----------------------

 

 

,File

File:

代表一个文件或文件夹的路径;File类是IO包中唯一代表磁盘文件本身的对象,目录也被当做File使用,

2,绝对路径和相对路径:

绝对路径:从盘符开始的,完整的路径,不论在什么环境下运行,都是找指定的路径;

相对路径:不从盘符开始,相对于一个其他路径,Eclipse中相对于工程文件夹,cmd中相对于提示符目录,运行环境不同,相对的路径也就不同;

3,File构造函数

File(String pathname)

通过指定路径创建一个File对象;

:File f1 = new File("file.txt");

File(String parent,String child)

通过指定父级路径和自己路径创建一个File对象;

Stringparent = "F:/Itcast/WorkSpace/day21";

   Filef1 = new File(parent,"pathDemo.java");

File(File parent,String child)

和上面方法类似,但父级路径是一个File对象;

File parent= "F:/Itcast/WorkSpace/day21";

   Filef1 = new File(parent,"pathDemo.java");

4,常用方法:

Sting getName()---->>获取文件名;

String getParent() ---->>获取父级路径名

Long length() -------->>获取文件大小

Long lastModified----->>获取最后修改时间

Boolean exists ------->>判断是否存在

Boolean isFile -------->>判断是否是文件

Boolean isDirectory---->>判断是否是文件夹

Boolean renameTo(File dest)---->>改名

Boolean creatNewFile() ----->>创建新文件

Boolean mkdir() --------->>创建文件夹(不包含父级)

Boolean mkdirs() ------->>创建文件夹(包含父级)

Boolean delete() --------->>删除

String[] list()---------------->>获取文件夹下所有子文件名(String)

File[] listFiles() ----------->> 获取文件夹下的所有子文件(File对象);

:

package File;

 

importjava.io.File;

 

publicclass MethodDemo {

 

   /**File类常用方法;

    * @param args

    * @throws IOException 

    */

   publicstaticvoid main(String[] args) throws IOException {

      // TODOAuto-generated method stub

      //demo1();

   // demo2();

   // mkdir();

   // delete();

   // space();

   // get();

      //demo3();

   // length();

      //renameTo();      

   }

      publicstaticvoid renameTo() {

      File f = new File("a.txt");

      System.out.println(f.renameTo(new File("file.txt")));  //改名;如改到其他文件夹,类似于剪切;

      File f1 = new File("file.txt");

      System.out.println(f1.renameTo(new File("e:/file.txt")));

   }

 

   publicstaticvoid length() {

      File f = new File("FileDemo.java");

      System.out.println(f.length());

      File f1 = new File("a");

      System.out.println(f1.length());// 文件夹没有大小, Windows系统上看到的文件夹大小其实就是累计子文件大小的和

   }

 

   publicstaticvoid demo3() {

      File f = new File("E:/STUDY/day0914/a.txt");

      System.out.println(new Date(f.lastModified()));   //最后修改时间;

   }

 

   publicstaticvoid get() {

      File f = new File("E:/STUDY/day0914/a.txt");

      System.out.println(f.getName());  //获取文件名;

      System.out.println(f.getParent()); //获取父级路径名;

   }

 

   publicstaticvoid space() {

      File f = new File("a.txt");

      System.out.println("磁盘总空间"+f.getTotalSpace());

      System.out.println("磁盘剩余空间="+f.getFreeSpace());

   }

 

   publicstaticvoid delete() {

      File f1 = new File("file.txt");

      System.out.println(f1.delete());  //删除文件,成功返回true;

      File f2 = new File("test"); 

      System.out.println(f2.delete());

      File f3 = new File("a/b/");    //删除文件夹时,里面有文件或者文件夹,都是不能删除的;

      System.out.println(f3.delete());

   }

 

   publicstaticvoid mkdir() {

      File f = new File("test");

      System.out.println(f.mkdir());  //创建新文件夹,成功返回true;

      File f1 = new File("a/b/c");   

      System.out.println(f.mkdir());    //父级路径不存在,不能创建多个文件夹

      System.out.println(f1.mkdirs());  //父级路径不存在,就一起创建文件夹;

   }

 

   publicstaticvoid demo2() throws IOException {

      File f =new File("a.txt");

      System.out.println(f.createNewFile());  //创建新文件,成功返回true,已有,返回false;

   }

 

   publicstaticvoid demo1() {

      File f1 = new File("file.txt");

      //设置文件是否可读,可写,可执行;

      f1.setReadable(true);

      f1.setWritable(true);

      f1.setExecutable(true);

      //查看文件是否可读,可写,可执行;

      System.out.println(f1.canRead());

      System.out.println(f1.canWrite());

      System.out.println(f1.canExecute());

   }

 

}

 

,递归:

函数自己调用自己就是递归,有些时候在程序中的工作需要反复调用,可以使用递归解决,通常递归调用函数都会有一个退出条件;

:

publicclass RecursionDemo {

 

   /**递归:

    * @param args

    */

   publicstaticvoid main(String[] args) {

      //打印和;

      System.out.println(count (5));

      System.out.println(count(7));

   }

   publicstaticint count(int i) {

      return i == 1? 1: count2(i -1)+i;

   }

}

删除原理
 在window中,删除目录从里面往外删除的
 既然是从里往外删除,就需要要到递归
 public static void removeDemo(File dir)
 {


  File[] files =dir.listFiles();


  for (int x=0;x<files.length ;x++ )


  {


   if (files[x].isDirectory())//遍历时,判断是否为隐藏文件 

files[x].isHidden()&&file[x].isDirectory,
          //但删除时,不用,
   {
   

 removeDemo(files[x]);
   }


   Else


    System.out.println(files[x].toString()+":file:"+files[x].delete());

  }


 

 System.out.println(dir+"dir"+dir.delete());


 }

.打印流

   1.什么是打印流

      PrintStream是一个打印流在程序中输出数据的时候经常使用这个流它既可以输出字节也可以输出字符.

      通常使用PrintStream都是输出指定对象toString()方法的返回值

   2.怎么使用

      创建PrintStream可以指定一个文件写出也可以指定一个字节输出流可以指定码表和自动flush()

      print()println()方法都可以将指定对象的toString()返回值写出

      println()在写出之后加上换行符号

     

.标准输入输出流

   1.什么是标准输入输出流

      System.in是一个InputStream, 它是标准输入流默认可以从键盘输入读取字节.

      System.out是一个PrintStream, 它是标准输出流默认可以向屏幕输出数据.

   2.改变标准输入输出流

      使用System.setIn(InputStream)可以将标准输入流指向其他数据源

      使用System.setOut(PrintStream)可以将标准输出流指向其他的数据目的地

     

.字节数组输出流

   1.什么是字节数组输出流

      ByteArrayOutputStream是一个可以向内存中写出字节的一个输出流通常可以作为一个缓冲区使用

   2.怎么使用

      创建对象之后可以向ByteArrayOutputStream写入字节数据这些数据都会在内存中存储.

      可以调用toByteArray()方法将写入的数据一次性获取出来

      如果想清空数据可以调用reset()方法

      获取长度可以调用size()方法

   3.应用场景

      读取一个文件中的文本数据转为字符串.

      如果使用普通的字符输入流读取那么会每读一两个字节转为一个字符这样效率较低.

      可以使用FileInputStream将文件数据读取写入到ByteArrayOutputStream将文件中所有内容都写入.

      然后使用ByteArrayOutputStreamtoByteArray()方法一次性获取数据转为字符.

     

.数据输入输出流

   1.什么是数据输入输出流

      DataInputStream, DataOutputStream, 可以按照基本数据类型大小读写数据

   2.怎么使用

      使用DataOutputStream可以按照基本数据类型大小写出例如: writeInt()方法可以写出一个int4个字节. writeLong()可以写出long8个字节

      使用DataInputStream可以读取DataOutputStream写出的数据例如: readInt()可以读取4个字节, readLong()可以读取8个字节

  

.对象输入输出流

   1.什么是对象输入输出流

      ObjectInputStream, ObjectOutputStream, 可以读写对象

   2.怎么使用

      使用ObjectOutputStream.writeObject()方法可以写出一个实现了Serializable接口的对象

      使用ObjectInputStream.readObject()方法可以读取ObjectOutputStream写出的对象

   3.读写多个对象

      如果需要写出多个对象通常会将多个对象存入集合然后将集合写出

      读取的时候读到集合遍历集合即可

  

.序列流(合并流)

   1.什么是序列流

      SequenceInputStream可以用来把多个输入流合并成一个

   2.怎么使用

      使用构造函数可以接收2InputStream, 或者一个包含多个InputStreamEnumeration

      创建SequenceInputStream之后读取的时候内部会从第一个流逐个读取直到所有的流都读完才读到末尾

分割流:

练习:使用分割流分割文件 ,再使用合并流合并;

packageSplitFile;

importjava.io.FileInputStream;

publicclass SplitFileDemo {

publicstaticvoid main(String[] args) throws IOException {

      // splitFile(); //分割文件;

      sequenceFile(); // 合并文件;

   }

publicstaticvoid sequenceFile() throws FileNotFoundException, IOException {

      ArrayList<FileInputStream> al = new ArrayList<FileInputStream>(); // 创建集合,用来存储文件片段;

      for (int x = 1; x <= 6; x++) { // 遍历文件片段,将片段装入集合中;

         al.add(new FileInputStream("e:/" + x + ".part"));

      }

Enumeration<FileInputStream>en = Collections.enumeration(al); // 使用Collections工具类中的enumeration获取al集合的Enumeration

      //使用合并流读取字节数组输出流写出;

      SequenceInputStream sis = new SequenceInputStream(en); // 合并流,将获取到的en装入;

      FileOutputStream fos = new FileOutputStream("e:/周传雄-暖风.ape");//写出到指定文件;

      byte[] buffer = newbyte[1024];

      int len;

      while ((len = sis.read(buffer)) != -1)

         fos.write(buffer, 0, len);    

      fos.close(); //关流;

      sis.close();

   }

 

   publicstaticvoid splitFile() throws FileNotFoundException, IOException {

      FileInputStream fis = new FileInputStream("周传雄-暖风.ape");  //读取文件,文件大小为25.4MB;

      FileOutputStream fos = null;   //

      byte[] buffer = newbyte[1024 * 1024 * 5];  //创建数组大小,用来存储读到的数据;数组越大,读取越快,越占内存;

      int len;    

      int count = 1;     //给分割的文件定义编号;

      while ((len = fis.read(buffer)) != -1) { 

         //每读取一次,写出到一个新的文件中,

         fos = new FileOutputStream("e:/" + (count++) + ".part");

         fos.write(buffer, 0, len);

         fos.close();

      }

      fis.close();

      //可以省略,在循环中已关流,

      if (fos != null)

         fos.close();

   }

 

}

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

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

 

String-->byte[];  str.getBytes(charsetName);

byte[] -->String:new String(byte[],charsetName);

     

.IO总结

   1.字节流拷贝文件

      FileInputStreamFileOutputStream, 自定义数组

      BufferedInputStreamBufferedOutputStream, 内置缓冲区

   2.字符流读写文本文件

      InputStreamReader, FileReader,BufferedReader读取字符数据

      OutputStreamWriter, FileWriter, BufferedWriter写出字符数据

   3.File

      拷贝文件夹

原创粉丝点击