黑马程序员——IO流(二)

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

File类:

用来将文件或者文件夹封装成对象

方便对文件与文件夹的属性信息进行操作

File对象可以作为参数传递给流的构造函数

  

流只能操作数据  Flie可以对文件与文件夹的属性信息进行操作

separator:与系统有关的默认名称分隔符,为了方便它被表示为一个字符串

File类常见方法:

1.创建

  

  boolean creatNewFile();

  在指定位置创建文件,如果该文件已经存在,则不创建,返回false

  和输出流不一样,输出流对象一建立就会创建文件,如果该文件已经存在会对原文件进行覆盖

import java.io.*;
 
class FileDemo {
    publicstatic void main(String[] args) throws IOException {
        method_1();
        //System.out.println("Hello World!");
    }
 
    publicstatic void method_1() throws IOException {
        Filef = new File("file.txt");
        System.out.println("creat:"+ f.createNewFile());
    }
}


boolean mkdir():创建文件夹 只能创建一级目录 如果文件夹已存在则创建失败,返回false 而且

boolean mkdirs():创建多级文件夹 

 

import java.io.*;
 
class FileDemo {
    publicstatic void main(String[] args) throws IOException {
        method_2();
    }
 
    publicstatic void method_2() {
        Filef = new File("file.txt");
        Filedir = new File("abc//cba");// 如果没有文件夹abc 则创建失败,返回false 只能创建一级文件夹
        System.out.println("mkdir:"+ dir.mkdir());
    }
}
 


  2.删除

  

  boolean delete();删除失败返回假

  void deleteOnExit() 在程序退出时删除指定文件。

  

  

  3.判断

  

  boolean exists():文件是否存在

  boolean isFile() 是否是文件

  boolean isDirectory() 是否是目录

  boolean isHidden()  是否是隐藏

  boolean isAbsolute() 是否是绝对路径

  

  4.获取信息

  getName()

  getPath()

  getParent() 该方法返回的是绝对路径中的父目录,如果获取的是相对路径 返回null

              如果相对路径中有上一层目录那么该目录就是返回结果            

  getAbsolutePath()

  length()

  lastModified()

 

 

import java.io.*;
 
class FileDemo {
    publicstatic void main(String[] args) {
        //consMethod();
        method_1();//第二次运行出现false
    }
 
    publicstatic void method_1() {
        Filef = new File("file.txt");
        sop("creat:"+ f.creatNewFile());// 创建指定文件
    }
 
    publicstatic void method_3()
   {
       File f = new File("file.txt")
       //记住在判断文件对象是否是文件或者目录时,必须要先判断该文件对象封装的内容是否存在
       //通过exists判断
       sop(f.isFile());//打印为false  文件不存在
       sop(f.isDirectory());//打印为false
   }
 
    publicstatic void consMethod() {
        //将a.txt封装成file对象。可以将已有的和未出现的文件或者文件夹封装成对象
        Filef1 = new File("c:\\abc\\a.txt");
        Filef0 = new File("a.txt");
 
        Filef2 = new File("c:\\abc", "b.txt");
 
        Filed = new File("c:\\abc");
 
        Filef3 = new File(d, "c.txt");
        sop("f1:"+ f1);// 打印 f1:c:\\abc\\a.txt
        sop("f0:"+ f1);// 打印 f1:a.txt
        sop("f2:"+ f2);// 打印 f2:c:\\abc\\b.txt
        sop("f3:"+ f3);// 打印 f3:c:\\abc\\c.txt
        //由于目录分隔符\\在不同系统中定义不同 因此可以用File.separator完成跨平台操作
        Filef4 = new File("c:" + File.separator + "abc" +File.separator + "zsc" + File.separator + "b.txt");
 
    }
 
    publicstatic void sop(Object obj) {
        System.out.println(obj);
    }
 
}
 


 

Flie对象功能--文件列表

 

import java.io.*;
 
class FileDemo2 {
    publicstatic void main(String[] args) {
        listRootsDemo();
        listDemo();
    }
 
    publicstatic void listRootsDemo() {
        File[]files = File.listRoots();
        for(File f : files) {
            System.out.println(f);//输出结果C:\ D:\ ...
        }
    }
 
    publicstatic void listDemo()
 {
     File f = new File("C:\\");
     String[] names = f.list();\\调用list方法的file对象必须是封装了一个目录 该目录还必须存在, 否则报错空指针异常
     for(String name :names)
     {
           System.out.println(name);//输出结果为C盘目录下的所有文件名 包含隐藏文件
     }
 }
}
 


list(FilenameFilter filter) 

返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中满足指定过滤器的文件和目录。

 

class List1 {
    publicstatic void main(String[] args)
   {
       File dir = new File("E:\Java练习");
       String[] arr = dir.list(new FilenameFilter()
       {
           public boolean accept(Filedir,String name)
           //System.out.println(dir+"---"+name);//测试dir(目录)和name(目录内文件名)是什么
           //if(name.endWith(".java"))
             // return true;
            //else
              //return false;
              returnname.endWith(".java");
       })
   }
}


 

listFiles()

返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件。

 

 

class ListFiles
{
   public static void main(String[] args)
   {
       File dir = new File("E:\\");
       File[] files = dir.listFiles();
       for(File f : files)
       {
           System.out.println(f.getName()+"---"+f.length());//文件夹大写无法获取
       }
   }
}


 

列出指定目录下文件或者文件夹,包含子目录中的内容

也就是列出指定目录下所有内容

因为目录中还有目录,只要使用同一个列出目录的功能的函数完成即可

在列出过程中出现的还是目录的话,还可以再次调用本功能

这种表现形式或者编程手法,称为递归

递归要注意的

1.限定条件

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

 

 

import java.io.*;
class FileDemo3
{
   public static void main(String[] args)
   {
       File dir = new File("e:\\java练习");
       showDir(dir);
       toBin(6);
   }
   public static void toBin(int num)
   {
       if(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])
       }
   }
}


 

列出目录下所有内容--带层次

 

import java.io.*;
 
class FileDemo3 {
    publicstatic void main(String[] args)
   {
       File dir = new File("e:\\java练习");
       showDir(dir);
   }
 
    publicstatic String getLevel(int level)
   {
       StringBuilder sb = new StringBuilder();
       sb.append("|--")
       for(int x=0;x<level;x++)
       {
            sb.insert(0,"  ")
        }
        return sb.toString();
   }
 
    publicstatic void showDir(File dir,int level)
   {
       System.out.println(getLevel(level)+dir.getName());
       level++;
       File[] files = dir listFiles();
       for(int x=0;x<files.length;x++)
       {
            if(files[x].isDirectory())
                showDir[Files[x,level]]
            else
               System.out.println(getLevel(level)files[x])
       }
   }
}
 


删除一个带内容的目录

删除原理:

在window中,删除目录从里面往外删除的

既然是从里往外删除,就需要用到递归

 

 

import java.io.*;
 
class RemoveDir {
    publicstatic void main(String[] args)
   {
       File dir = new File("E:\\TEST")
       removerDir(dir);
   }
 
    publicstatic void removeDir(File dir)
   {
       File[] files = dir.listFiles();
       for(int x=0;x<files.length;x++)
       {
            if(files[x].isDirectory())
                removeDir(files[x]);
            eles
                //files[x].delete();
                System.out.println(files[x].toString()+"::"+files[x].delete());
       }
       System.out.println(dir+":dir:"+dir.delete());
   }
}


 

Properties 是hashtable的子类

也就是说它具备map集合的特点,而且它里面存储的键值对都是字符串

是集合中和IO技术相结合的集合容器

该对象的特点可以用于键值对形式的配置文件

在加载数据时,需要数据有固定格式:键=值

 

 

import java.io.*;
import java.util.*;
 
class PropertiesDemo {
    publicstatic void main(String[] args) throws IOException {
        setAndGet();
        method_1();
        loadDemo();
    }
 
    publicstatic void loadDemo() throws IOException {
        Propertiesprop = new Properties();
        FileInputStreamfis = new FileInputStream("info.txt");
        //将流中数据加载进集合
        prop.load(fis);
        //System.out.println(prop);
        FileOutputStreamfos = new FileOutputStream("info.txt");
        prop.store(fos,"haha");
        prop.list(System.out);
        fos.close();
        fis.close();
 
    }
 
    //演示,如何将流中数据存储到集合中
    //想要将info.txt中键值数据存储到集合中进行操作
    /*
     * 1.用一个流和info.txt文件关联 2.读取一行数据,将该行数据用“=”进行切割
     * 3.等号左边作为键,右边作为值,存入到Properties集合中即可
     */
    publicstatic void method_1() throws IOException {
        BufferedReaderbufr = new BufferedReader(new FileReader(info.txt));
        Stringline = null;
        Propertiesprop = new Properties();
        while((line = bufr.readLine()) != null) {
            String[]arr = line.split("=");
            prop.setProperty(arr[0],arr[1]);
 
        }
        bufr.close();
        System.out.println(prop);
    }
 
    //设置和获取元素
    publicstatic void setAndGet() {
        Propertiesprop = new Properties();
        prop.setProperty("zhangsan","30");
        prop.setProperty("lisi","40");
 
        //System.out.println(prop);
        Stringvalue = prop.getProperty("lisi");
        System.out.println(value);
 
        prop.setProperty("lisi",89 + "");
 
        Set<String>names = prop.stringPropertyName();
        for(String s : names) {
            System.out.println(s+ ":" + prop.getProperty(s));
        }
    }
}
 


 

IO包中的其他类

打印流

    PrintWriter与PrintStream

        可以直接操作输入流和文件

序列流

    SequenceInputStream

        对多个流进行合并

操作对象

    ObjectInputStream与ObjectOutputStream

练习:文件分割程序

打印流:

该流提供了打印方法,可以将各种数据类型的数据都原样打印

字节打印流

PrintStream

构造函数可以接收的参数类型(需要记下)

1.file对象    File

2.字符串路径  String

3.字节输出流  OutputStream

字符打印流

PrintWriter

1.file对象    File

2.字符串路径  String

3.字节输出流  OutputStream

4.字符输出流  Writer

 

 

import java.io.*;
 
class PrintStreamDemo {
    publicstatic void main(String[] args) throws IOException {
        BufferedReaderbufr = new BufferedReader(new InputStreamReader(System.in));
 
        PrintWriterout = new PrintWriter(new FileWriter("E:\\Java练习\\a.txt", true));
 
        Stringline = null;
 
        while((line = bufr.readLine()) != null) {
            if("over".equals(line))
                break;
            out.println(line);
 
        }
        out.close();
        bufr.close();
    }
}
 


 

合并流

SequenceInputStream

构造方法摘要 

SequenceInputStream(Enumeration<? extends InputStream> e)         

SequenceInputStream(InputStream s1, InputStream s2) 

 

 

import java.io.*;
import java.util.*;
 
class SequenceDemo {
    publicstatic void main(String[] args) throws IOException {
        //新建Vector对象
        Vector<FileInputStream> v = newVector<FileInputStream>();
        //将流对象添加到集合中
        v.add(newFileInputStream("e:\\Java练习\\1.txt"));
        v.add(newFileInputStream("e:\\Java练习\\2.txt"));
        v.add(newFileInputStream("e:\\Java练习\\3.txt"));
 
        //返回此向量的组件的枚举。返回到Enumeration中
        Enumeration<FileInputStream>en = v.elements();
 
        //如果需要传入2个以上的流对象SequenceInputStream(Enumeration<? extends InputStream>
        //e)可以实现
        //需要传入Enumeration 而Vector可以获取Enumeration
        //因此需要新建Vector对象
        SequenceInputStreamsis = new SequenceInputStream(en);
 
        FileOutputStreamfos = new FileOutputStream("e:\\Java练习\\4.txt");
 
        byte[]buf = new byte[1024];
 
        intlen = 0;
        while((len = sis.read(buf)) != -1) {
            fos.write(buf,0, len);
        }
        fos.close();
        sis.close();
 
    }
}


 

切割文件

 

import java.io.*;
import java.util.*;
 
class SplitFile {
    publicstatic void main(String[] args) {
        //splitFile();
        merge();
    }
 
    publicstatic void merge()
   {
       ArrayList<FileInputStream> al = newArrayList<FileInputStream>();
       
       for(int x=1;x<=5;x++)
       {
            al.add(newFileInputStream("e:\\Java练习\\"+(x++)+".part"))
       }
       
       Iterator it = al.iterator();
       
       Enumeration<FileInputStream> en = newEnumeration<FileInputStream>()
       {
            public boolean hasMoreElements()
            {
                return it.hasNext();
            }
            public FileInputStreamnextElement()
            {
                return it.next();
            }
       };
       
       SequenceInputStream sis = new SequenceInputStream(en);
       
       FileOutputStream fos = new FileOutputStream("e:\\Java练习\\1.mp3");
       
       byte[] buf = new byte[1024];
       
       int len = 0;
       
       while((len=sis.read())!=-1)
       {
            fos.write(buf,0,len)
       }
       fos.close();
       sis.close();
   }
 
    publicstatic void splitFile()
   {
       FileInputStream fis = new FileInputStream("e:\\Java练习\\0.mp3");
       
       FileOutputStream fos = null;
       
       byte[] buf = new byte[1024*1024];
       
       int len = 0;
       int x = 1;
       while((len=fis.read(buf))!=-1)
       {
            fos = newFileOutputStream("e:\\Java练习\\"+(x++)+".part")
            fos.write(buf,0,len);
            fos.close();
       }
       fis.close();
   }
}
 
 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
毕业设计,基于SpringBoot+Vue+MySQL开发的纺织品企业财务管理系统,源码+数据库+毕业论文+视频演示 在如今社会上,关于信息上面的处理,没有任何一个企业或者个人会忽视,如何让信息急速传递,并且归档储存查询,采用之前的纸张记录模式已经不符合当前使用要求了。所以,对纺织品企业财务信息管理的提升,也为了对纺织品企业财务信息进行更好的维护,纺织品企业财务管理系统的出现就变得水到渠成不可缺少。通过对纺织品企业财务管理系统的开发,不仅仅可以学以致用,让学到的知识变成成果出现,也强化了知识记忆,扩大了知识储备,是提升自我的一种很好的方法。通过具体的开发,对整个软件开发的过程熟练掌握,不论是前期的设计,还是后续的编码测试,都有了很深刻的认知。 纺织品企业财务管理系统通过MySQL数据库与Spring Boot框架进行开发,纺织品企业财务管理系统能够实现对财务人员,员工,收费信息,支出信息,薪资信息,留言信息,报销信息等信息的管理。 通过纺织品企业财务管理系统对相关信息的处理,让信息处理变的更加的系统,更加的规范,这是一个必然的结果。已经处理好的信息,不管是用来查找,还是分析,在效率上都会成倍的提高,让计算机变得更加符合生产需要,变成人们不可缺少的一种信息处理工具,实现了绿色办公,节省社会资源,为环境保护也做了力所能及的贡献。 关键字:纺织品企业财务管理系统,薪资信息,报销信息;SpringBoot
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值