• Java从零开始学三十五(JAVA IO- 字节流)


    一、字节流

    FileOutputStream是OutputStream 的直接子类
    FileInputStream也是InputStream的直接子类

    二、文本文件的读写

    2.1、字节输入流

     

    Test.txt文件内容
    abcdefg
    package com.pb.io;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    
    /*
     * FileInputStreamDemo读取文件
     */
    public class FileInputStreamDemo1 {
    
        public static void main(String[] args) {
            //1.声明文件对象,也可以跳过此步直接在第2步中写
            File f=new File("d:"+File.separator+"test"+File.separator+"test.txt"); 
            //FileInputStream fis=new FileInputStream("d:/test/hello.txt");
            try {
                //2.创建FileInputStream对象并将file对象传入
                FileInputStream fis=new FileInputStream(f);
                //3.定义整型变量用来存放内容
                int date;
                //4先查看文件可以读取的字节类available()方法获取文件的字节数
                System.out.println("可读取的字节数:"+fis.available());
                System.out.println("=========开始读取文件==========");
                //5读取文件read()方法
                System.out.println("========没有转换前输出=======");
                while((date=fis.read())!=-1){   //!=-1说明文件还有内容=-1时,就说明文件内容读完结束
                    
                    System.out.println(date+"	");
    
                }
                System.out.println("=======文件读取结束=========");
                //关闭流
                fis.close();
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
            
    
        }
    
    }

    结果:

    可读取的字节数:7
    =========开始读取文件==========
    ========没有转换前输出=======
    97    
    98    
    99    
    100    
    101    
    102    
    103    
    =======文件读取结束=========

    结果:并不是文件中的内容

    修改上面的文件:

    package com.pb.io;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    
    /*
     * FileInputStreamDemo读取文件
     */
    public class FileInputStreamDemo1 {
    
        public static void main(String[] args) {
            //1.声明文件对象,也可以跳过此步直接在第2步中写
            File f=new File("d:"+File.separator+"test"+File.separator+"test.txt"); 
            //FileInputStream fis=new FileInputStream("d:/test/hello.txt");
            try {
                //2.创建FileInputStream对象并将file对象传入
                FileInputStream fis=new FileInputStream(f);
                //3.定义整型变量用来存放内容
                int date;
                //4先查看文件可以读取的字节类available()方法获取文件的字节数
                System.out.println("可读取的字节数:"+fis.available());
                System.out.println("=========开始读取文件==========");
                //5读取文件read()方法
                System.out.println("========转换后转出=======");
                while((date=fis.read())!=-1){   //!=-1说明文件还有内容=-1时,就说明文件内容读完结束
                    char c=(char)date;
                    System.out.println(c+"	");
                }
                System.out.println("=======文件读取结束=========");
                //6.关闭流
                fis.close();
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
            
    
        }
    
    }

    结果:

    可读取的字节数:7
    =========开始读取文件==========
    ========转换后转出=======
    a    
    b    
    c    
    d    
    e    
    f    
    g    
    =======文件读取结束=========

    小结:FileInputStream

    1.read()读取内容,是返回int值

    2.需要转换字符

    3.read()方法是单程的,

    4.一定要关闭流

    2.2、字节输出流

    package com.pb.io;
    
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.util.Scanner;
    
    public class FileOutputStreamDemo1 {
    
        public static void main(String[] args) {
            
            try {
                //1.实例化FileOutputStream对象,在文件的末尾追加内容
                FileOutputStream fos=new FileOutputStream("d:/test/test.txt",true);
                //2.创建他写入的字符串
                Scanner input=new Scanner(System.in);
                System.out.println("请输入要写入文件的内容:");
                String    str=input.next();
                    //3.将内容转换为字节数组
                byte[] bytes=str.getBytes();
                //4.将内容写入
                fos.write(bytes,0,bytes.length);  //3个参数的方法,从0开始到数组结束的全部写入
                System.out.println("文件写入结束!");
                //5.关闭流
                fos.close();
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            
    
        }
    
    }

    结果:

    请输入要写入文件的内容:输入e结束
    好好学习,天天向上 hello java!
    文件写入结束!

    test.txt

    abcdefg好好学习,天天向上

    在进行写操作时,如果文件不存在,将自动创建这个文件,如果上面没test.txt,将会自动创建这个文件,可以试下,将文件删除再运行

     三、综合使用

    package pb.io.file;
    
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.util.Scanner;
    
    /**
     * 拷贝文件
     * @author 北大青鸟
     *
     */
    public class CopyFile {
    
        public static void main(String[] args) {
            Scanner input=new Scanner(System.in);
            int date=0;
            System.out.print("请输入您要拷贝的源文件:");
            String file1=input.next();
            System.out.print("请输入您要拷贝的目标位置:");
            String file2=input.next();
            try {
                FileInputStream fis = new FileInputStream(file1);
                FileOutputStream fos = new FileOutputStream(file2);
                while((date=fis.read())!=-1){//读取文件
                    char c=(char)date;
             fos.write(c); } fis.close(); fos.close(); System.out.println(
    "拷贝成功!"); } catch (FileNotFoundException e) { System.out.println("源文件未找到!"); } catch (IOException ex) { System.out.println(ex.toString()); } } }
  • 相关阅读:
    Oracle9使用oradata恢复数据库
    我该怎么安排下属的工作项目经理如何分配任务
    如果说中国的程序员技术偏低,原因可能在这里
    项目经理问:为什么总是只有我在加班 – 挂包袱现象
    【转】面试真经
    [JAVA]PING和TELNET用法介绍
    Hello World 你懂的
    线程间操作控件
    获取客户端相关信息
    winfrom 特效 [转载]
  • 原文地址:https://www.cnblogs.com/liunanjava/p/4307111.html
Copyright © 2020-2023  润新知