文件IO流

2018-07-26  本文已影响0人  cccccttttyyy

从控制台读取输出字符
从文件中写入读取字符
从文件中写入读取字节
文件夹操作

image.png

1. 从控制台读取输出字符

输入由System.in完成。将System.in放入inputStreamReader中,再传入到提供缓冲区的BufferReader中。读取单个字符使用 read()函数,当返回值为-1时代表读取到结尾。读取一行文字时用readLine()函数。输出即最常用的System.out.println();

 BufferedReader br = new BufferedReader(new InputStreamReader(System.in));//将字符流绑定到控制台
        //读取字符
        System.out.println("输入字符, 按下 'q' 键退出。");
        char c;
        do {
            c = (char) br.read();//read方法每次从控制台中读取一个字符
            System.out.println(c);
        } while (c != 'q');
        //读取字符串
        String str;
        System.out.println("接下来请输入字符串,输入‘end’退出");
        do {
            str = br.readLine();
            System.out.println(str);
        } while (!str.equals("end"));
    }

2. 从文件中写入读取字符

与文件进行IO操作时,用FileInputStream FileOutputStream,若是字符组成的文件,为方便操作还要放入InputStreamReader(常用于字节到字符的转换),OutputStreamWriter中。

        File f = new File("a.txt");
        FileOutputStream fop = new FileOutputStream(f);
        // 构建FileOutputStream对象,文件不存在会自动新建
        OutputStreamWriter writer = new OutputStreamWriter(fop, "UTF-8");
        // 构建OutputStreamWriter对象,参数可以指定编码,默认为操作系统默认编码,windows上是gbk
        writer.append("中文输入");
        writer.append("\r\n");
        writer.append("English");
        writer.close();
        fop.close();

        FileInputStream fip = new FileInputStream(f);
        InputStreamReader reader = new InputStreamReader(fip, "UTF-8");
        // 构建InputStreamReader对象,编码与写入相同
        StringBuffer sb = new StringBuffer();//读取缓冲区
        while (reader.ready()) {
            sb.append((char) reader.read());
            // 转成char加到StringBuffer对象中
        }
        System.out.println(sb.toString());
        reader.close();
        fip.close();

3. 从文件中写入读取字节

二进制文件如图片,媒体文件等需要通过字节方式传输。此时不要放入Reader和Writer中。

        byte[] by = new byte[4];
        InputStream is = new FileInputStream("aa.jpg");
        OutputStream os = new FileOutputStream("b.jpg");
        while(is.read(by)!=-1)
        {
            os.write(by);
        }
        os.close();
        is.close();

4. 文件夹操作

对文件夹的创建,列表,删除操作。

        File fordir = new File("E:/testtext/hell/e");
        fordir.mkdirs();//创建文件夹
        //fordir.createNewFile();
        System.out.println(fordir.isDirectory());//判断是否是一个文件夹
        //查看文件夹里的内容
        String s[] = fordir.list();
        for (int i = 0; i < s.length; i++) {
            File f1 = new File(fordir + "/" + s[i]);
            if (f1.isDirectory()) {
                System.out.println(s[i] + " 是一个目录");
            } else {
                System.out.println(s[i] + " 是一个文件");
            }
        }
        //删除文件夹
        File fordel = new File(fordir + "/"+ "1");
        fordel.mkdir();
        fordel.delete();

使用IO流的常用方式如下:

1) File file = new File ("hello.txt"); 
FileInputStream in=new FileInputStream (file); //读取二进制
2) File file = new File ("hello.txt"); 
FileInputStream in=new FileInputStream (file); 
InputStreamReader inReader=new InputStreamReader (in,"UTF-8"); 
BufferedReader bufReader=new BufferedReader(inReader); //需要指定编码的字符文件
3) File file = new File ("hello.txt"); 
FileReader fileReader=new FileReader(file); //与InputStreamReader区别仅仅是构造函数
BufferedReader bufReader=new BufferedReader(fileReader);

附全部代码:

import java.io.*;
public class Main {
    public static void main(String[] args) throws IOException {
       //IoReadCmd();
       //IoReadFile();
       IoDir();

    }
    public static void IoReadCmd() throws IOException {
        /**
         * JavaIO流之控制台
         * Java 的控制台输入由 System.in 完成。
         */
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));//将字符流绑定到控制台
        //读取字符
        System.out.println("输入字符, 按下 'q' 键退出。");
        char c;
        do {
            c = (char) br.read();//read方法每次从控制台中读取一个字符
            System.out.println(c);
        } while (c != 'q');
        //读取字符串
        String str;
        System.out.println("接下来请输入字符串,输入‘end’退出");
        do {
            str = br.readLine();
            System.out.println(str);
        } while (!str.equals("end"));
    }
    public static void IoReadFile() throws IOException{
        /**
         * JavaIO流之文件
         */
        //字符方式读取写入文件
        File f = new File("a.txt");
        FileOutputStream fop = new FileOutputStream(f);
        // 构建FileOutputStream对象,文件不存在会自动新建
        OutputStreamWriter writer = new OutputStreamWriter(fop, "UTF-8");
        // 构建OutputStreamWriter对象,参数可以指定编码,默认为操作系统默认编码,windows上是gbk
        writer.append("中文输入");
        writer.append("\r\n");
        writer.append("English");
        writer.close();
        fop.close();

        FileInputStream fip = new FileInputStream(f);
        InputStreamReader reader = new InputStreamReader(fip, "UTF-8");
        // 构建InputStreamReader对象,编码与写入相同
        StringBuffer sb = new StringBuffer();//读取缓冲区
        while (reader.ready()) {
            sb.append((char) reader.read());
            // 转成char加到StringBuffer对象中
        }
        System.out.println(sb.toString());
        reader.close();
        fip.close();
        
        //流方式读取 写入图片
        byte[] by = new byte[4];
        InputStream is = new FileInputStream("aa.jpg");
        OutputStream os = new FileOutputStream("b.jpg");
        while(is.read(by)!=-1)
        {
            os.write(by); 
        }
        os.close();
        is.close();
    }
    public static void IoDir(){
        /**
         * JavaIO流之文件夹
         */
        File fordir = new File("E:/testtext/hell/e");
        fordir.mkdirs();//创建文件夹
        //fordir.createNewFile();
        System.out.println(fordir.isDirectory());//判断是否是一个文件夹
        //查看文件夹里的内容
        String s[] = fordir.list();
        for (int i = 0; i < s.length; i++) {
            File f1 = new File(fordir + "/" + s[i]);
            if (f1.isDirectory()) {
                System.out.println(s[i] + " 是一个目录");
            } else {
                System.out.println(s[i] + " 是一个文件");
            }
        }
        //删除文件夹
        File fordel = new File(fordir + "/"+ "1");
        fordel.mkdir();
        fordel.delete();
    }
}
上一篇 下一篇

猜你喜欢

热点阅读