码迷,mamicode.com
首页 > 其他好文 > 详细

IO流(三)

时间:2017-12-22 23:55:00      阅读:166      评论:0      收藏:0      [点我收藏+]

标签:1.3   操作文件   构造   tabs   mes   执行   inpu   dwr   print   

File类

  操作文件和目录的对象。

  

  1.创建与删除

    1.1 常用的构造函数:

      File(String pathname);

      File(File parent,String child);

      File(String parent,String child);

    1.2  创建

      createNewFile();  返回boolean类型,如果创建成功返回true,如果文件创建失败返回false。 

      createTempFile(String prefix,String suffix);  在默认临时文件目录下创建临时文件,并指定文件名的前缀和后缀,前缀至少三个字符,后缀可以为null,默认为".tmp"。

      createTempFile(String prefix,String suffix,File directory)  在指定目录下创建临时文件。

      mkdir()   创建指定的目录。

      mkdirs()   创建指定的目录,包括父目录。

   1.3  删除

      delete()   删除文件或目录,删除成功返回true,失败返回false。

        注:目录为空 才能被删除。

      deleteOnExit()  退出时删除。 没有返回值。

  2.判断

     canExecute()  判断该文件是否可执行。

    canRead()    判断该文件是否可读。

    canWrite()    判断该文件是否可写。

    exists()      判断文件是否存在。

    isAbsolute()   判断是否为绝对路径。

    isDirectory()   判断是否为目录。

    isFile()     判断是否为标准文件。

    isHidden()    判断是否为隐藏文件。

 

  3.获取

     String getName()   获取文件名;

     String getAbsolutePath()  获取绝对路径;

     String getPath()  获取路径;(我们封装的是什么路径,就获取什么路径)

     String getParent()  获取父路径;(我们封装的路径中的文件父路径)

 

     long length()  获取文件的大小。(单位是字节)

    long getFreeSpace()   返回指定分区未分配的字节数。

    long getTotalSpace()  返回指定分区的总字节数。

    long getUsableSpace()  返回指定分区的可用字节数。

  4.文件列表

     String[ ] list()  返回一个字符串数组,得到指定目录中的所有文件和目录,包括隐藏文件和目录

    String[ ] list(FilenameFilter filter)  返回一个字符串数组,得到满足过滤器的所有文件和目录

    File[ ] listFiles()  返回一个File对象的数组,得到指定目录中的所有文件和目录,包括隐藏文件和目录

    File[ ] listFiles(FilenameFilter filter)  返回一个File对象的数组,得到满足过滤器的所有文件和目录

    File[ ] listFiles(FileFilter filter)  返回一个File对象的数组,得到满足过滤器的所有文件和目录

    static File [ ] listRoots()  返回File对象的数组,得到系统中的所有的可用盘符。

    

  listRoots例子:

public static void list()
    {
        File[] roots = File.listRoots();
        
        for (File root : roots)
        {
            System.out.println(root+"\t一共"+root.getTotalSpace()/1024.0/1024.0/1024.0+"\tG."
                    +"\t还有"+root.getFreeSpace()/1024.0/1024.0/1024.0+"\tG.未分配\t还有"
                    +root.getUsableSpace()/1024.0/1024.0/1024.0+"\tG.可用空间");
        }
    }

   list例子:

public static void list()
    {
        File f = new File("d:");
        String[] names = f.list();
        
        for (String name : names)
        {
            System.out.println(name);
        }
        
    }

 

  list(FilenameFilter filter) 例子:

public static void listFilter()
    {
        File f = new File("d:");
        String[] names = f.list(new FilenameFilter()
        {
            public boolean accept(File dir, String name)  //dir就是我们封装的路径那个文件夹,name就是那个文件夹下的所有文件
            {
                
                return name.contains("java");
            }
        });
        
        for (String name : names)
        {
            System.out.println(name);
        }
    }

 

  

 

  5.递归

    1.递归就是:函数自己调用自己。

    2.需要注意的是:

      1.递归的条件限定。以免出现死循环。

      2.递归的次数,如果次数太多会出现内存溢出。

      

    3.列出D盘下所有的文件。

public static void listD(File f)
    {
        File f1 = new File(f.toString());
        
        File[] lists = f1.listFiles();
        
        for (File file : lists)
        {
            if(file.isDirectory() && !file.isHidden())  //因为有些隐藏的系统文件我们没有访问权限,如果要遍历它就会报NullPointerException
                listD(file);
            else
                System.out.println(file);
        }
        
    }

 

如果文件比较多,在eclipse中显示太长,可以搞一个输出流,写道一个文本文件中去。

public static void listD(File f) throws IOException
    {
        File f1 = new File(f.toString());
        
        //搞一个输出流,将遍历的文件写入一个txt文本中
        BufferedWriter bw = new BufferedWriter(new FileWriter("1.txt",true));
        
        File[] lists = f1.listFiles();
        
        for (File file : lists)
        {
            if(file.isDirectory() && !file.isHidden())
                listD(file);
            else
            {
                bw.write(file.toString());
                bw.newLine();
                bw.flush();
            }
        }
        bw.close();
        
    }

 

  7.Properties

    Properties是hashtable的子类,也就是说它具备Map集合的特点。存储的方式都是键值对。但是建和值都是字符串。

    特点:可以用于键值对存在的配置文件。

    

    7.1.存取。

      setProperties(String key,String value);  存

      String getProperties(String key);  取

      Set<String> stringPropertyNames() ;  得到所有的Key值

    7.2.存取配置文件

       load(InputStream in);  从输入流中读取配置信息(使用的是字节流)

       load(Reader r);  从输入流中读取配置信息(使用字符流)

      简单实现load 方法 原理:

public static void loadYuanLi()
    {
        BufferedReader br = null;
        Map<String,String> map = null;
        
        try
        {
            br = new BufferedReader(new FileReader("set.ini"));
            
            map = new HashMap<String,String>();
            
            String line = null;
            
            while((line = br.readLine())!=null)
            {
                String[] info = line.split("=");
                
                map.put(info[0], info[1]);
            }
            
            System.out.println(map);
            
            
        } catch (IOException e)
        {
            e.printStackTrace();
        }finally
        {
            if(br != null)
                try
                {
                    br.close();
                } catch (IOException e)
                {
                    e.printStackTrace();
                }
        }
    }

 

   将配置信息写入配置文件中

    store(InputStream in);

    store(Writer out);  

 

 8.打印流

    8.1.PrintWriter

       字符输出流中的一个。它是 Writer 的子类。只是这个类中提供了  print 系列的打印方法。

    8.2PrintStream

       字节输出流中的一个。它是 OutputStream 的子类FilterOutputStream 的子类。同样只是在这个类中提供了  print 系列的打印方法。

  9.合并流

     简单实现文件的合并

    

public static void heBin() throws IOException
    {
        //Vector 效率很低,所以用ArrayList
        ArrayList<FileInputStream> arr = new ArrayList<FileInputStream>();
        
        for(int i=1;i<5;i++)
        {
            arr.add(new FileInputStream("d:\\DocumentAPI.part"+i));
        }
        
        Iterator<FileInputStream> it = arr.iterator();
        
        Enumeration<FileInputStream> en = new Enumeration<FileInputStream>()
        {
            public FileInputStream nextElement()
            {
                return it.next();
            }
            
            public boolean hasMoreElements()
            {
                return it.hasNext();
            }
        };
        
        SequenceInputStream sis = new SequenceInputStream(en);
        
        FileOutputStream fos = new FileOutputStream("d:\\DocumentApi.rar");
        
        byte[] buff = new byte[1024];
        int len = 0;
        
        while((len=sis.read(buff))!=-1)
        {
            fos.write(buff, 0, len);
        }
        
        System.out.println("合并完成...");
        
        sis.close();
        fos.close();
            
    }

 

  10.切割文件

    实现简单的文件切割

  

public static void cutE()
    {
        FileInputStream fis = null;
        FileOutputStream fos = null;
        try
        {
            fis = new FileInputStream("D:\\Java\\Java手册\\DocumentAPI.rar");    //源文件很小,只有3M多
            
            byte[] buff = new byte[1024*1024];//定义缓冲区为1M
            
            int len = 0;
            int part = 1;
            
            while((len=fis.read(buff))!=-1)
            {
                fos = new FileOutputStream("d:\\DocumentAPI.part"+(part++));
                
                fos.write(buff,0,len);
            }
            
            System.out.println("切割完成...");
            
        } catch (IOException e)
        {
            e.printStackTrace();
        }finally
        {
            if(fis!=null)
                try
                {
                    fis.close();
                } catch (IOException e)
                {
                    e.printStackTrace();
                }
            
            if(fos!=null)
                try
                {
                    fos.close();
                } catch (IOException e)
                {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
        }
    }

 

IO流(三)

标签:1.3   操作文件   构造   tabs   mes   执行   inpu   dwr   print   

原文地址:http://www.cnblogs.com/alwaysJP/p/8011473.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!