黑马程序员-----Java基础-----File,Properties和其他IO处理流

黑马程序员—–Java基础—–File,Properties和其他IO处理流

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

一.File类

Java File类的功能非常强大,利用Java基本上可以对文件进行所有的操作。
特点:
1)用来将文件或文件夹封装成对象
2)方便于对文件与文件夹的属性信息进行操作
3)File类的实例是不可变的;也就是说,一旦创建,File 对象表示的抽象路径名将永不改变
4)File对象可以作为参数传递给流的构造函数
下面对Java File文件操作类进行详细地分析,并将File类中的常用方法进行简单介绍。

构造函数
public class FileDemo {
     public static void main(String[] args){
         //构造函数File(String pathname)
         File f1 =new File("c:\\abc\\1.txt");
         //File(String parent,String child)
         File f2 =new File("c:\\abc","2.txt");
         //File(File parent,String child)
         File f3 =new File("c:"+File.separator+"abc");//separator 跨平台分隔符
         File f4 =new File(f3,"3.txt");
         System.out.println(f1);//c:\abc\1.txt

     }

 }
创建方法

1.boolean createNewFile() 不存在返回true 存在返回false
2.boolean mkdir() 创建目录
3.boolean mkdirs() 创建多级目录

删除方法

1.boolean delete()
2.boolean deleteOnExit() 文件使用完成后删除

import java.io.File;
import java.io.IOException;
public class FileDemo2 {
    public static void main(String[] args){
        File f =new File("d:\\1.txt");
        try {
            System.out.println(f.createNewFile());//当文件存在时返回false
            System.out.println(f.delete());//当文件不存在时返回false
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}
判断方法

1.boolean canExecute()判断文件是否可执行
2.boolean canRead()判断文件是否可读
3.boolean canWrite() 判断文件是否可写
4.boolean exists() 判断文件是否存在
5.boolean isDirectory()
6.boolean isFile()
7.boolean isHidden()
8.boolean isAbsolute()判断是否是绝对路径 文件不存在也能判断

获取方法

1.String getName()
2.String getPath()
3.String getAbsolutePath()
4.String getParent()//如果没有父目录返回null
5.long lastModified()//获取最后一次修改的时间
6.long length()
7.boolean renameTo(File f)
8.File[] liseRoots()//获取机器盘符
9.String[] list()
10.String[] list(FilenameFilter filter)

应用:

列出磁盘下的文件和文件夹

public class FileDemo3 {
     public static void main(String[] args){
         File[] files =File.listRoots();
         for(File file:files){
             System.out.println(file);
             if(file.length()>0){
                 String[] filenames =file.list();
                 for(String filename:filenames){
                     System.out.println(filename);
                 }
             }
         }
     }

 }

文件过滤

import java.io.File;
 import java.io.FilenameFilter;
 public class FileDemo4 {
     public static void main(String[] args){
         File[] files =File.listRoots();
         for(File file:files){
             System.out.println(file);
             if(file.length()>0){
                 String[] filenames =file.list(new FilenameFilter(){
                     //file 过滤目录 name 文件名
                     public boolean accept(File file,String filename){
                         return filename.endsWith(".mp3");
                     }
                 });
                 for(String filename:filenames){
                     System.out.println(filename);
                 }
             }
         }
     }

 }

利用递归列出全部文件

public class FileDemo5 {
    public static void main(String[] args){
        File f =new File("e:\\音樂");
        showDir(f);
    }
    public static void showDir(File dir){
        System.out.println(dir);
        File[] files =dir.listFiles();
        for(File file:files){
            if(file.isDirectory())
                showDir(file);
            else 
                System.out.println(file);
        }
    }
}

移动文
找出d盘下所有的 .java 文件,拷贝至 c:\jad 目录下,并将所有文件的类型由.java 修改为.jad 。

public class Test5 {
    public static void main(String[] args){
        File f1 = new File("d:\\");
        moveFile(f1);
    }
public static void moveFile(File dir){
    File[] files=dir.listFiles();
    for(File file:files){
        if(file.isDirectory())
            moveFile(file);
        else{
            if(file.getName().endsWith(".java"))
                file.renameTo(new File("c:\\jad\\"+
            file.getName().substring(0,file.getName().lastIndexOf('.'))+".jad"));
            }
        }
    }
}

以上就是Java File类的全部属性和方法,我们只需简单地调用上面的方法即可完成对指定文件的操作。

二.Properties类

Properties是Hashtable的子类,它具备Map集合的特点。而且它里面还有存储的键值对,都是字符串,无泛型定义。是集合中和IO技术想结合的集合容器。
特点:
1)可用于键值对形式的配置文件
2)在加载时,需要数据有固定的格式,常用的是:键=值

特有方法
1、设置
Object setProperty(String key,String value);
//设置键和值,调用Hashtable的方法put
2、获取
String getProperty(String key);
//指定key搜索value
Set stringPropertyName();
//返回属性列表的键集,存入Set集合
3、加载流和存入流
void load(InputStream ism);
//从输入字节流中读取属性列表(键和元素对)。又称将流中的数据加载进集合。
void load(Readerreader);
//从输入字符流中读取属性列表(键和元素对)。又称将流中的数据加载进集合。
voidlist(PrintStream out);//将属性列表输出到指定的输出流
void store(OutputStreamout,String comments);
//对应load(InputStream )将属性列表(键值对)写入输出流。comments属性列表的描述。
void store(Writerwriter, String comments);
//对应load(Reader)将属性列表(键值对)写入输出流。comments属性列表的描述。

示例代码

        //将文件数据存储进Properties集合方法  
    public static void method()throws IOException  
    {  
        //使用字符读取缓冲流关联文件  
        BufferedReader bufr = new BufferedReader(new FileReader("info.txt"));  

        String line = null;  
        //定义Properties集合  
        Properties prop = new Properties();  

            while((line=bufr.readLine())!=null)  
        {  
            String[] arr = line.split("=");//将一行数据以“=”号进行分割  
            //将=左边作为键存入,将=右边作为值存入  
            prop.setProperty(arr[0],arr[1]);  
        }  

        bufr.close();//关流  

        System.out.println(prop);  
    }  

三.其他处理流

1. PrintStream
构造方法中可接收的参数类型:
1、File对象。File
2、字符串路径:String
3、字符输出流:OutputStream
字符串打印流:PrintWriter
构造方法中可接受的参数类型
1、File对象:File
2、字符串路径:String
3、字节输出流:OutputStream
4、字符输出流:Writer

示例代码

import java.io.BufferedReader;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintStream;
import java.io.PrintWriter;
import java.io.Reader;

/*
 * PrintStream字节打印流,输出数据更简单
 */
public class Test02 {
    public static void main(String[] args) throws IOException {
        test1();
    }

    // PrintStream
    public static void test1() throws IOException {
        // 定义一个文件字节输出流
        FileOutputStream fos = new FileOutputStream("D:\\Java\\itany.txt");
        // 定义一个字节打印流
        PrintStream ps = new PrintStream(fos, true);
        ps.println(25);
        ps.println("哈哈");
        ps.println("嘻嘻");
        ps.print(true);
        ps.print(13.5);
        ps.append('a');
        // ps.flush();
        System.out.println("打印数据成功!");
        ps.close();
    }

    //PrintWriter
    public static void test2() throws IOException{
        //定义一个文件字符输出流
        FileWriter fw=new FileWriter("D:\\Java\\itany.txt");
        //定义一个字符打印流
        PrintWriter pw=new PrintWriter(fw);
        //打印9*9乘法表
        for(int i=1;i<=9;i++){
            for(int j=1;j<=i;j++){
                pw.print(i+"*"+j+"="+(i*j)+"\t");
            }
            pw.println();
        }
        pw.flush();
        pw.close();
        fw.close();

        //读取数据
        BufferedReader reader=new BufferedReader(new FileReader("D:\\Java\\itany.txt"));
        String str=null;
        while((str=reader.readLine())!=null){
            System.out.println(str);
        }
        reader.close();

    }

}```

重定向标准输入输出

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;

/*
* 重定向标准输入输出
*
* 默认输入设备为键盘
* 默认输出设备为显示器
*/
public class Test03 {
public static void main(String[] args) throws IOException {
//从默认输入设备获取一个字节的数据
/*int data=System.in.read();
System.out.println((char)data);*/

    //将标准输入设备重定向到文件
    FileInputStream fis=new FileInputStream("D:\\Java\\itany.txt");
    System.setIn(fis);//重定向输入
    //将标准转出设备重定向到PrintStream
    PrintStream ps=new PrintStream("D:\\Java\\hello.txt");
    System.setOut(ps);//重定向输出


    //调用标准输入设备读取数据
    int data=System.in.read();
    while(data!=-1){
        //调用标准输出设备打印数据
        System.out.write((char)data);
        //System.out.print((char)data);
        data=System.in.read();
        System.out.flush();

    }
    System.in.close();
    System.out.close();
    fis.close();
    ps.close();
}

}

2.SequenceInputStream
SequenceInputStream对多个流进行合并。也被称为合并流。常用构造函数SequenceInputStream(Enumeration< ?extends FileInputStream > e)。

使用步骤:
合并多个流文件步骤
1、创建集合,并将流对象添加进集合
2、创建Enumeration对象,将集合元素加入。
3、创建SequenceInputStream对象,合并流对象
4、创建写入流对象,FileOutputStream关联写入文件
5、利用SequenceInputStream对象和FileOutputStream对象读数据进行反复读写操作。

 /* 

需求:将三个文本文件中的数据合并到一个文本文件中 

*/  
import java.util.*;  
import java.io.*;  

class  SequenceInputStreamDemo  
{  
    public static void main(String[] args)throws IOException  
    {  
        Vector<InputStream> ve=new Vector<InputStream>();//创建vector集合,并添加相关流对象  
        ve.add(new FileInputStream("1.txt"));  
        ve.add(new FileInputStream("2.txt"));  
        ve.add(new FileInputStream("3.txt"));  

        Enumeration<InputStream> en=ve.elements();//创建枚举对象  
        SequenceInputStream sis=new SequenceInputStream(en);//合并流  

        FileOutputStream fos=new FileOutputStream("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();  
    }  
}     

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值