美文网首页
Day20--IO流

Day20--IO流

作者: pure_joy | 来源:发表于2019-07-20 21:47 被阅读0次
    File类
    • 用来将文件或者文件夹封装成对象。
    • 方便对文件与文件夹的属性信息进行操作
    • File对象可以作为参数传递给流的构造函数
    File类常见方法:

    1、创建
     boolean createNewFile():在指定文件创建文件,如果过该文件已经存在,则不创建,返回false。和输出流不一样,输出流对象一建立创建文件,而且文件已经存在,会覆盖。
     boolean mirdir():创建文件夹,只能创建一级文件夹
     boolean mirdirs():创建多级文件夹
    2、删除
     boolean delete():删除失败返回false。
     void deleteOnExit():在程序退出时删除指定文件。
    3、判断
     boolean exists():文件是否存在。
     isFile();
     isDirectory();
     isHidden();
     isAbsolute();
    4、获取信息
     getName();
     getPath();
     getParent():该方法返回的是绝对路径中的父目录。如果获取的是相对路径,返回null。如果相对路径中有上一层目录那么该目录就是返回结果。
     getAbsolutePath();
     long lastModified():获取文件最后修改时间
     long length();
    记住,在判断文件对象是否是文件或者目录时,必要要先判断该文件对象封装的内容是否存在。通过exists判断。

    递归
    /*
    列出指定目录下文件或者文件夹,包含子目录中的内容。
    也就是列出指定目录下所有内容。
    
    因为目录中还有目录,只要使用同一个列出目录功能的函数完成即可。
    在列出过程中出现的还是目录的话,还可以再次调用本功能。
    也就是函数自身调用自身。
    这种表现形式,或者编程手法,称为递归。
    */
    import java.io.*;
    
    class FileDemo3
    {
        public static void main(String[] args) 
        {
            File dir = new File("d:\\");
            showDir(dir);
        }
    
        public static void toBin(int num)
        {
            while(num>0)
            {
                toBin(num/2);
                System.out.println(num%2);
            }
        }
    
        public static void showDir(File dir)
        {
            System.out.println(dir);
            File[] files = dir.listFiles();
            for(int x=0; x<files.length; x++)
            {
                if(files[x].isDirectory())
                    showDir(files[x]);
                else
                    System.out.println(files[x]);
            }
        }
    }
    
    • 递归要注意:
      1、限定条件。
      2、要注意递归的次数。尽量避免内存溢出。
    • 删除带内容的目录
    /*
    删除一个带内容的目录
    删除原理:
    在window中,删除目录从里面往外删除的。
    
    既然是从里往外删除,就需要用到递归。
    */
    import java.io.*;
    class RemoveDir
    {
        public static void main(String[] args) 
        {
            File dir = new File("D:\\");
            removeDir(dir);
        }
    
        public static void removeDir(File dir)
        {
            File[] files = dir.listFiles();
    
            for(int x=0; x<files.length; x++)
            {
                if(!files[x].isHiddemn() && files[x].isDirectory())
                    removeDir(files[x]);
                else
                    System.out.println(files[x].toString()+"::"+files[x].delete());
            }
    
            System.out.println(dir+"::"+dir.delete());
        }
    }
    
    • 创建java文件列表
    /*
    练习
    将一个指定目录下的java文件的绝对路径,存储到一个文本文件中。
    建立一个java文件列表文件
    
    思路:
    1、对指定的目录进行递归
    2、获取递归过程所有的java文件的路径。
    3、将这些路径存储到集合中。
    4、将集合中的数据写入到一个文件中。
    */
    import java.io.*;
    import java.util.*;
    class JavaFileList
    {
        public static void main(String[] args) throws IOException
        {
            File dir = new File("D:\\");
    
            List<File> list = new ArrayList<File>();
    
            fileToList(dir);
    
            //System.out.println(list.size());
    
            File file = new File(dir,"javalist.txt");
    
            writeToFile(list,file.toString());
            
        }
    
        public static void fileToList(File dir,List<File> list)
        {
            File[] files = dir.listFiles();
    
            for(File file : files)
            {
                if(file.isDirectory())
                    fileToList(file,list)
                else
                {
                    if(file.getName().endsWith(".java"))
                        list.add(file);
                }
            }
        }
    
        public static void writeToFile(List<File> list,String javaListFile)throws IOException
        {
            BufferedWriter bufw = null;
    
            try
            {
                bufw = new BufferedWriter(new FileWriter(javaListFile));
            
                for(File f : list)
                {
                    String path = f.getAbsolutePath();
                    bufw.write(path);
                    bufw.newLine();
                    bufw.flush();
                }
            }
            catch(IOException e)
            {
                throw e;
            }
            finally
            {
                try
                {
                    if(bufw!=null)
                        bufw.close();
                }
                catch(IOException e)
                {
                    throw e;
                }
            }
        }
    }
    
    Properties
    • 简述:
      Properties是hashtable的子类。也就是说它具备map集合的特点。而且它里面存储的键值对都是字符串。是集合中和IO技术相结合的集合容器。该对象的特点:可以用于键值对形式的配置文件。那么在加载数据时,需要数据有固定格式:键=值。
    /*
    用于记录应用程序运行次数。
    如果使用次数已到,那么给出注册提示。
    
    很容易想到的是:计数器。
    可是该计数器定义在程序中,随着程序的运行而在内存中存在,并进行自增。
    可是随着该应用程序的退出,该计数器也在内存中消失了。
    
    下一次在启动该程序,又重新开始从0计数。
    这样不是我们想要的。
    
    程序即使结束,该计数器的值也存在。
    下次程序启动也会先加载计数器的值并加1后在重新存储起来。
    
    所以要建立一个配置文件。用于记录该软件的使用次数。
    
    该配置文件使用键值对的形式存在。
    这样便于阅读数据,并操作数据。
    
    键值对数据是map集合。
    数据是以文件形式存储,使用IO技术。
    那么map+IO-->properties
    
    配置文件可以实现应用程序数据的共享。
    */
    import java.io.*;
    import java.until.*;
    class
    {
        public static void main(String[] args) throws IOException
        {
            Properties prop = new Properties();
    
            File  file = mew File("count.ini");
    
            if(!file.exists())
                file.createNewFile();
    
            FileInputStream fis = new FileInputStream(file);
    
            prop.load(fis);
    
            int count = 0;
            String  value = prop.getProperty("time");
    
            if(value!=null)
            {
                count = Integer.parseInt(value);
                if(count>=5)
                {
                    System.out.println("您好,使用次数已到,拿钱!");
                    return ;
                }
            }
    
            count++;
    
            prop.setProperty("time",count+"");
    
            FileOutputStream fos = new FileOutputStream(file);
    
            prop.store(fos,"");
    
            fos.close();
            fis.close();
        }
    }
    
    • 打印流:该流提供了打印方法,可以将各种数据类型的数据都原样打印。
    • 字节打印流(PrintStream)
      构造函数可以接受的参数类型:
      1、file对象。File
      2、字符串路径。String
      3、字节输出流。OutputStream
    • 字符打印流(PrintWriter):
      构造函数可以接收的参数类型:
      1、file对象。File
      2、字符串路径。String
      3、字节输出流。OutputStream
      4、字符输出流。Writer
    • 合并流
    import java.io.*;
    import java.util.*;
    class SequenceDemo
    {
        public static void main(String[] args)  throws IOException
        {
            Vector<FileInputStream> v = new Vector<FileInputStream>();  
            
            v.add(new FileInputStream("c:\\1.txt"));
            v.add(new FileInputStream("c:\\2.txt"));
            v.add(new FileInputStream("c:\\3.txt"));
    
            Enumeration<FileInputStream> en = v.elements();
    
            SequenceInputStream sis = new SequenceInputStream(en);
    
            FileOutputStream fos = new FileOutputStream("c:\\4.txt");
    
            byte[] buf = new byte[1024];
    
            int len = 0;
            while((len=sis.read(buf))!=-1)
            {
                fos.write(buf,0,len);
            }
    
            fos.close();
            sis.close();
        }
    }
    
    • 切割文件
    import java.io.*;
    import java.util.*;
    class SplitFile
    {
        public static void main(String[] args) throws IOException
        {
            splitFile();
        }
    
        public static void merge() throws IOException
        {
            ArrayList<FileInputStream> al = new ArrayList<FileInputStream>();
    
            for(int x=1; x<=3; x++)
            {
                al.add(new FileInputStream("c:\\splitfiles\\"+x+".part"));
            }
    
            Iterator<FileInputStream> it = al.iterator();
    
            Enumeration<FileInputStream> en = new Enumeration<FileInputStream>()
            {
                public boolean hashMoreElements()
                {
                    return it.hashNext();
                }
    
                public FileInputStream nextElement()
                {
                    return it.next();
                }
            };
    
            SequenceInputStream sis = new SequenceInputStream(en);
    
            FileOutputStream fos = new FileOutputStream("c:\\splitfiles\\0.bmp");
    
            byte[] buf = new byte[1024];
    
            int len = 0;
    
            while((len=sis.read(buf))!=-1)
            {
                fos.write(buf,0,len);
            }
    
            fos.close();
            sis.close();
        }
    
        public static void splitFile() throws IOException
        {
            FileInputStream fis = new FileInputStream("c:\\1.bmp");
    
            FileOutputStream fos = null;
    
            byte[] buf = new byte[1024*1024];
    
            int len = 0;
            int count = 1;
            while((len=fis.read(buf))!=-1)
            {
                fos = new FileOutputStream("c:\\splitfiles\\"+(count++)+".part");
                fos.write(buf,0,len);
                fos.close();
            }
    
            fis.close();
        }
    }
    

    相关文章

      网友评论

          本文标题:Day20--IO流

          本文链接:https://www.haomeiwen.com/subject/yvfulctx.html