黑马程序员技术交流社区

标题: IO流--File [打印本页]

作者: 洛奇亚    时间: 2015-9-22 22:24
标题: IO流--File
File

1、可以将一个已存在的或者不存在的文件或者目录封装成file对象

package cn.itcast.io.p2.file.demo;
import java.io.File;
public class FileDemo {
       
        public static void main(String[] args) {
               
                constructorDemo();
        }
        public static void constructorDemo() {
               
                //可以将一个已存在的或者不存在的文件或者目录封装成file对象。
                File file =new File("c:\\a.txt");
               
                File f2=new File("c:\\","a.txt");
               
                File f=new File("c:\\");
               
                File f3= new File(f,"a.txt");
               
                File f4= new File("c:"+File.separator+"abc"+File.separator+"a.txt");//File.separator表示“\”
               
        }
}

2、获取、创建与删除、判断、重命名
package cn.itcast.io.p2.file.demo;
import java.io.File;
import java.io.IOException;
import java.text.DateFormat;
import java.util.Date;
public class FileMethodDemo {
        public static void main(String[] args) throws IOException {
                /*
                 * File对象的常见方法:
                 *
                 * 1,获取: 1.1 获取文件名称 1.2获取文件路径 1.3 获取文件大小 1.4获取文件修改时间
                 *
                 * 2,创建与删除: boolean
                 *
                 * 3,判断: exists()
                 *
                 * 4,重命名: renameTo()
                 */
                getDemo5();
        }
        public static void getDemo5() {
               
                File file =new File("d:\\");
               
                file.getFreeSpace();//获取空闲空间
                file.getTotalSpace();//获取总容量
                file.getUsableSpace();//返回分区上可用于虚拟机的可用空间
               
               
        /*        File[] files = File.listRoots();
               
                for(File file :files){
                       
                        System.out.println(file);
                }*/
               
        }
        // 重命名
        public static void getDemo4() {
                File f1 = new File("c:\\2.mp3");
                File f2 = new File("d:\\aa.mp3");// 剪切
                boolean b = f1.renameTo(f2);
                System.out.println("b=" + b);
        }
        // 判断
        public static void getDemo3() {
                File f = new File("a.txt");
                f.mkdir();
                /*
                 * boolean b= f.exists();//判断
                 *
                 * System.out.println("b="+b);
                 */
                // 若文件不存在,则全为false
                System.out.println(f.isFile());// 是否是文件
                System.out.println(f.isDirectory());// 是否是目录
        }
        // 创建与删除
        public static void getDemo2() throws IOException {
                File dir = new File("abc\\q\\e");
                /*
                 * boolean d=dir.mkdir();//make directory创建文件 ,创建单级目录
                 *
                 * System.out.println("d="+d);
                 */
                // System.out.println(dir.mkdirs());//创建多级目录.delete方法删除时,删除最底层目录。
                System.out.println(dir.delete());// 删除 ,windows的删除是从里往外删的。
                File file = new File("file.txt");
                /*
                 * 和输出流不一样,如果文件不存在,则创建,如果文件存在则不创建。
                 */
                /*
                 * boolean b=file.createNewFile();
                 *
                 * System.out.println("b="+b);
                 */
                boolean c = file.delete();
                // file.deleteOnExit();//退出时删除
                System.out.println("c=" + c);
        }
        public static void getDemo1() {
                File file = new File("a.txt");
                String name = file.getName();
                String absPath = file.getAbsolutePath();// 绝对路径
                String path = file.getPath();// 目录文件;写什么拿什么
                long len = file.length();
                long time = file.lastModified();
                Date date = new Date(time);
                DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG,
                                DateFormat.LONG);
                String str_time = dateFormat.format(date);
                System.out.println("name:" + name);
                System.out.println("absPath:" + absPath);
                System.out.println("path:" + path);
                System.out.println("length:" + len);
                System.out.println("time:" + time);
                System.out.println("str_time:" + str_time);
        }
}

3、获取当前目录下的文件以及文件名称,包含隐藏文件、获取非隐形文件、获取指定后缀名的文件
package cn.itcast.io.p2.file.demo;
import java.io.File;
public class FileListDemo {
        public static void main(String[] args) {
                ListDemo_2();
        }
        // 获取非隐形文件
        public static void ListDemo_3() {
                File dir = new File("c:\\");
                File[] files = dir.listFiles(new FilterByHidden());
                for (File file : files) {
                        System.out.println(file);
                }
        }
        // 获取指定后缀名的文件
        public static void ListDemo_2() {
                File dir = new File("c:\\");
                // 过滤指定后缀名
                String[] names = dir.list(new SuffixFilter(".java"));
                // String[] names = dir.list(new FilterByJava());
                for (String name : names) {
                        System.out.println(name);
                }
        }
        public static void ListDemo() {
                File file = new File("c:\\");
                /*
                 * 获取当前目录下的文件以及文件名称,包含隐藏文件 调用list方法中的file对象中封装的必须是目录。 否则会发生空指针异常。
                 * 若果访问的是系统目录也会发生空指针异常。
                 *
                 * 如果目录存在但是没有内容,会返回一个数组,但是长度为0。
                 */
                String[] names = file.list();
                System.out.println(names.length);
                for (String name : names) {
                        System.out.println(name);
                }
        }
}
去除隐形文件
package cn.itcast.io.p2.file.demo;
import java.io.File;
import java.io.FileFilter;
public class FilterByHidden implements FileFilter {
        @Override
        public boolean accept(File pathname) {
                return !pathname.isHidden();
        }
}
获取后缀名为.java的文件
package cn.itcast.io.p2.file.demo;
import java.io.File;
import java.io.FilenameFilter;
public class FilterByJava implements FilenameFilter {
        @Override
        public boolean accept(File dir, String name) {
                return name.endsWith(".java");
        }
}
获取指定后缀名的文件
package cn.itcast.io.p2.file.demo;
import java.io.File;
import java.io.FilenameFilter;
public class SuffixFilter implements FilenameFilter {
        private String suffix;
       
        public SuffixFilter(String suffix) {
                super();
                this.suffix = suffix;
        }
        public boolean accept(File dir, String name) {
                return name.endsWith(suffix);
        }
}

4、对指定的目录进行所有内容的列出(包含子目录中的内容)
package cn.itcast.io.p1.file.test;
import java.io.File;
/*
* 需求:对指定的目录进行所有内容的列出(包含子目录中的内容)
*
* 也可以理解为深度遍历。
*
*/
public class FileTest {
        public static void main(String[] args) {
                File dir = new File("e:\\demodir");
                listAll(dir,0);
        }
        public static void listAll(File dir,int level) {
                System.out.println(getSpace(level)+dir.getName());//dir.getAbsolutePath()获取绝对路径
               
                level++;
                //获取指定目录下当前的所有文件夹或者文件对象   
                File[] file = dir.listFiles();
               
                for(File files :file){
                       
                        if(files.isDirectory()){
                               
                                listAll(files,level);
                       
                        }
                        else
                        System.out.println(getSpace(level)+files.getName());
                }
               
        /*        for(int x=0;x<file.length;x++){
                       
                        System.out.println(file[x].getAbsolutePath());
               
                }*/
        }
        //目录层次分级效果
        public static String getSpace(int level) {
               
                StringBuilder sb=new StringBuilder();
               
                sb.append("|---");
               
                for(int i=0;i<level;i++){
                        sb.insert(0, "|   ");
                }
               
                return sb.toString();
        }
}

5、删除一个带内容的目录。
package cn.itcast.io.p1.file.test;
import java.io.File;
public class RemoveDirTest {
        /*
         * 删除一个带内容的目录。
         *
         * 原理:必须要从最里面往外删除。
         */
        public static void main(String[] args) {
                File dir = new File("e:\\demodir");
                removeDir(dir);
        }
        public static void removeDir(File dir) {
               
                File[] files = dir.listFiles();
                for (File file : files) {
                        if (file.isDirectory()) {
                               
                                removeDir(file);
                       
                        } else {
                                System.out.println(file + ":" + file.delete());//删除文件
                        }
                }
               
                System.out.println(dir+":"+dir.delete());//删除文件夹
        }
}

6、产生一百个随机的素数,并将其存储到指定文档中。
package cn.itcast.io.p1.file.test;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
public class TestRandom {
        public static void main(String[] args) {
                new TestRandom();
        }
        public TestRandom() {
                int i = 0;
                int k = 0;
                ArrayList<Integer> shou = new ArrayList<Integer>();
                int[] zhengShu = new int[100];
                System.out.print("产生的随机数是:");// 测试代码
                for (i = 0; i < zhengShu.length; i++) {
                        zhengShu[i] = (int) (Math.random() * 1000);// 给数组赋值
                        System.out.print(zhengShu[i] + " ");// 测试代码
                }
                System.out.println();// 换行
                for (int j = 0; j < zhengShu.length; j++) {
                        for (k = 2; k < zhengShu[j]; k++) {// 判断能不能被整除
                                if ((zhengShu[j] % k) == 0) {
                                        break;
                                }
                        }
                        if (k == zhengShu[j])// 如果以上都不是,就是k与zhengShu[j]
                                shou.add(zhengShu[j]);// 把这个数加到shou数组中
                }
                for (int q = 0; q < shou.size(); q++) {
                        System.out.print(shou.get(q) + " ");// 打印素数,测试代码
                }
                System.out.println("\n");
                File file = new File("素数.txt");
                try {
                        FileWriter ps = new FileWriter(file, true);
                        for (int j = 0; j < shou.size(); j++) {
                                ps.write(shou.get(j) + "  " + "\n");// 把素数打印到文本文档里面
                        }
                        ps.flush();
                        ps.close();
                } catch (FileNotFoundException e) {
                        e.printStackTrace();
                } catch (IOException ex) {
                        ex.printStackTrace();
                }
        }
}

作者: xuxu5112    时间: 2015-9-22 23:06
好多好全 学习了




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