美文网首页
文件IO流

文件IO流

作者: cccccttttyyy | 来源:发表于2018-07-26 16:49 被阅读0次

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

    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();
        }
    }
    

    相关文章

      网友评论

          本文标题:文件IO流

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