Java IO流(上)

IO流的基本介绍,输出文件属性:

import java.io.File;

public class Application {

    public static void main(String[] args) {
        // 通过IO流 把程序中的数据保存到硬盘上 以及读取硬盘上的数据到程序内。
        //IO = Input(从硬盘读取数据到程序) 和 Output(把程序数据保存到硬盘)
        //流:在程序和硬盘之间搭建一个管道,用来传输数据,
        //    体积比较大的数据,会被拆分为许多很小的模块,进行传输 ,叫做数据流

        //File 类 表示因硬盘上的一个文件
        //路径分隔符使用 / 或者 \\
        File file = new File("S:/111.txt");

        //通过 get方法可以获取文件的各种属性,例如:
        System.out.println(file.lastModified());//最后一次修改时间
        System.out.println(file.getName());//文件名字
        System.out.println(file.getParentFile());//所在文件夹名称
        System.out.println(file.getPath());//文件路径

        //特殊的方法
        System.out.println("文件是否存在:" + file.exists());
        //文件 = 普通文件 + 文件夹(目录)
        System.out.println("文件是否是目录:" + file.isDirectory());

        //对于目录来说
        File file2 = new File ("S:/");
        System.out.println("文件是否是目录:" + file2.isDirectory());
        //获取这个目录中保存的所有文件
        File[] file2s = file2.listFiles();

        for (File file3 : file2s) {
            //输出所有文件名
            //System.out.println("——" + file3.getName());
            if (file3.isDirectory()) {
                //输出目录名字
                System.out.println("——" + file3.getName());
            }
        }       
    }
}

小练习,输出目录中的子目录中的文件(面试题):


import java.io.File;

public class Application2 {

    public static void main(String[] args) {

        // 写一个方法 输出某个目录下的所有文件名字,包括子目录中的文件名字
        File file = new File("S:/");

        //输出d盘下所有文件路径
        printFilePath(file);
    }
    //输出指定目录中,所有的文件路径
    public static void printFilePath(File file) {
        //获取当前目录中的 所有文件
        File[] files = file.listFiles();
        //获取每一个文件
        if (files != null) {
            for (File f : files) {

                if(f.isDirectory()) {
                    //如果是目录,获取目录中的所有文件
                    printFilePath(f);//在方法内部调用方法自身的写法叫递归

                }else {
                    //普通文件
                    System.out.println(f.getPath());
                }
            }
        }
    }
}

创建 目录文件:


import java.io.File;
import java.io.IOException;

public class Application3 {

    public static void main(String[] args) {

        File f1 = new File("S:/222.txt"); //普通文件
        File f2 = new File("S:/333/444/555"); //目录
        File f3 = new File("S:/666"); //目录

        try {
            //创建普通文件
            f1.createNewFile();
        } catch (IOException e) {

            e.printStackTrace();
        }

        f2.mkdirs();//创建目录 +s的可以创建333/444... 不+s 只能创建333 
        f3.mkdir();//不+s 只能创建666
    }
}

通过IO 流 进行数据的读写操作:

写入:


import java.io.FileWriter;
import java.io.IOException;

public class Application4 {

    public static void main(String[] args) {

        //通过IO 流 进行数据的读写操作
        //IO 按照用途分为: InputStream 和 OutputStream
        //IO 按照类型分为: 字节流 和 字符流
        //字符流以字符(char = 2 byte)为单位传输数据,用来读取文本内容
        //字节流以字节(byte = 8位)为单位传输数据 ,用来读写非文本内容(如 图片,视频)

        //字符流:Reader 和 Writer 两个抽象类是所有字符流的输入输出的父类
        //比较常用的子类是 FileReader 和 FileWriter

        //向S:/111.txt 中写入内容
        try {
            FileWriter fw = new FileWriter("S:/111.txt",true);//true 追加模式,不会覆盖,默认覆盖

            fw.write("\r\n");//换行
            fw.write("谢特");//写入内容

            fw.close();//使用完关闭流
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

读取:


import java.io.FileReader;
import java.io.IOException;

public class Application5 {

    public static void main(String[] args) {
        //读取 S:/111.txt 中的文字

        try {
            FileReader fr = new FileReader("S:/111.txt");

//          只能读取固定数目的字符
//          //装载从文件中读取到的字符
//          char[] chars = new char[50];
//          
//          //从文钱中读取char.length 个字符,放入chars 中
//          fr.read(chars);
//          
//          //把读取的字符从char[] 转换为字符串
//          String line = new String(chars);
//          System.out.println(line);
//          

            //通过循环 读取所有的内容
            //装在读取内容让那个的容器
            char[] chars = new char[1024];//常用大小是1024,效率高

            //记录读取到哪个字符
            int length = -10001010;//局部变量必须设置成默认值才能使用

            //length = fr.read(chars);返回值是这次读取到了多少个字符
            //length != -1;         如果到了文章末尾没有读取到任何内容 返回-1
            //                       返回-1,说明所有内容都已经读取完毕 

            //用来拼接每次读取的内容
            StringBuffer sb = new StringBuffer();

            while((length = fr.read(chars)) != -1) {

                //把char[] 中 指定范围的字符转化为字符串
                String line = new String(chars, 0,length);//舍弃后面多余的读数

                //把每次读取的内容拼接在一起
                sb.append(line);
            }

            //StringBuffer转 String
            String text = sb.toString();
            System.out.println(text);

            //关闭流
            fr.close();
        } catch (IOException e) { //修改成IO 导包
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

}

猜你喜欢

转载自blog.csdn.net/ilovehua521/article/details/82684983