JAVA学习笔记(二十八) - 字节流 InputStream & OutputStream

Scanner类和nextLine()方法

import java.util.Scanner;

/*
 * Scanner类,用于从控制台输入数据,字节输入流
 * next()方法
 * 1.对输入有效字符之前的输入的空格、tab、回车等,会自动忽略
 * 2.只有在输入有效字符后,才会将空格、tab、回车作为结束符
 * 3.无法获取带有空格的字符串
 * 
 * nextLine()方法
 * 1.结束符只有回车,即返回回车之前所有的字符
 * 2.可以获取带有空格的字符串
 * 3.实现一次读取一行
 */
public class Test02 {
    public static void main(String[] args) {
        Scanner input=new Scanner(System.in);
        System.out.println("请输入数据:");
        //String data=input.next();
        String data=input.nextLine();
        System.out.println("数据:"+data);
        System.out.println("长度:"+data.length());
    }
}

InputStream字节输入流

/*
 * InputStream字节输入流
 * int read()
 * System.in 标准输入流,默认为键盘
 * System.out标准输出流,默认为显示器
 */
public class Test03 {
    public static void main(String[] args) {
        try {
            InputStream is=System.in;//定义一个字节输入流
            System.out.println("请输入数据:");
            int data=is.read();//每次读取一个字节,返回int类型的字节值
            while(data!=-1){ //如果没有读取到数据则返回-1
                //System.out.println(data);
                System.out.print((char)data);//转换为字符并输出,如果是中文会出现乱码
                data=is.read();//接着读取数据
            }

            is.close();//关闭流
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
import java.io.IOException;
import java.io.InputStream;

/*
 * InputStream类
 * int read(byte[] b)
 */
public class Test04 {
    public static void main(String[] args) {
        InputStream is = null;
        try {
            // 定義一個字節輸入流
            is = System.in;
            // 定義一個字節數組,用於保存数据
            byte[] buffer = new byte[100];
            System.out.println("请输入数据:");
            // 将数据读到字节数组中,返回实际读取的字节数
            int num = is.read(buffer);
            System.out.println("实际读取的字节数:" + num);
            // 输出字节数组中的数据
            for (byte b : buffer) {
                System.out.println(b + "=" + (char) b);
            }

            //将字节数组转换为字符串
            System.out.println("*****直接转换整个字节数组");
            String str=new String(buffer);
            System.out.println("字符串:"+str);
            System.out.println("长度:"+str.length());

            System.out.println("*****转换指定长度的字节数组");
            String str2=new String(buffer, 0, num);//将字节数组转换为字符串,从第0个开始,转换num个
            System.out.println("字符串:"+str2);
            System.out.println("长度:"+str2.length());
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                is.close();// 关闭流
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

FileInputStream文件字节输入流

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

/*
 * FileInputStream文件字节输入流,继承自InputSteam
 */
public class Test05 {
    public static void main(String[] args) throws IOException {
        test3();
    }

    public static void test1() throws IOException {
        // File file = new File("d:\\Java\\hello.txt");
        // FileInputStream fis = new FileInputStream(file);
        FileInputStream fis = new FileInputStream("d:\\Java\\hello.txt");
        int data = fis.read();// 如果读到文件末尾,返回-1
        while (data != -1) {// 判断是否读取到数据
            System.out.println((char) data);
            data = fis.read();// 继承读取
        }
        fis.close();// 关闭流
    }

    public static void test2() throws IOException {
        FileInputStream fis = new FileInputStream("d:\\Java\\hello.txt");
        byte[] buffer = new byte[10];
        int num = fis.read(buffer, 0, buffer.length);
        while (num != -1) {
            String str = new String(buffer, 0, num);// 将字节数组转换为字符串
            System.out.println(str);
            num = fis.read(buffer, 0, buffer.length);
        }

        fis.close();
    }

    public static void test3() throws IOException {
        FileInputStream fis = new FileInputStream("d:\\Java\\hello.txt");
        System.out.println("当前文件输入流大小:"+fis.available());
        byte[] buffer = new byte[fis.available()];
        fis.read(buffer);//将数据读取到字节数组buffer中
        System.out.println(new String(buffer));

        fis.close();
    }
}

FileOutputStream文件字节输出流


import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

/*
 * FileOutputStream文件字节输出流,继承自OutputStream
 */
public class Test06 {
    public static void main(String[] args) throws IOException {
        File file=new File("D:\\Java\\itany.txt");
        //创建一个FileOutputStream实例,默认会覆盖原文件的内容
        FileOutputStream fos=new FileOutputStream(file,true);
        //fos.write(97);//写入一个字节
        //byte[] info="hello world!".getBytes();//将字符串转换为字节数组
        byte[] info="哈哈哈哈".getBytes("utf-8");

        fos.write(info);

        fos.flush();//刷新缓冲区,写入数据
        fos.close();

        System.out.println("写入数据成功!");
    }
}

文件的复制

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

/*
 * 文件的复制
 */
public class Test07 {
    public static void main(String[] args) {
        test2();
    }

    // 每次读取一个字节
    public static void test1() {
        // 定义文件输入输出流
        FileInputStream fis = null;
        FileOutputStream fos = null;
        try {
            fis = new FileInputStream("D:\\Java\\hello.txt");
            fos = new FileOutputStream("D:\\Java\\world.txt");
            int data = -1;
            while ((data = fis.read()) != -1) {
                fos.write(data);
                // data=fis.read();
            }
            fos.flush();
            System.out.println("文件复制成功");
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                fos.close();
                fis.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    // 使用字节数组做为桥梁
    public static void test2() {
        // 定义文件输入输出流
        FileInputStream fis = null;
        FileOutputStream fos = null;
        try {
            fis = new FileInputStream("D:\\Java\\hello.txt");
            fos = new FileOutputStream("D:\\Java\\world.txt");
            byte[] buffer=new byte[10];
            int num=fis.read(buffer);
            while (num!= -1) {
                fos.write(buffer,0,num);
                num=fis.read(buffer);
            }
            fos.flush();
            System.out.println("文件复制成功");
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                fos.close();
                fis.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

}

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。