Java流(Stream)/文件(File)/IO
Java 流(Stream)、文件(File)和IO
Java.io包几乎包含了所有操作输入、输出需要的类。所有这些流类代表了输入源和输出目标。
字符集也称编码
一个流可以理解为一个数据的序列。
输入流表示从一个源读取数据,输出流表示向一个目标写数据。Java为I/O提供了强大的而灵活的支持,使其更广泛地应用到文件传输和网络编程中。
读取控制台输入
Java的控制台输入由System.in完成
读取文件
如前所述,一个流被定义为一个数据序列。输入流用于从源读取数据,输出流用于向目标写数据。
流是一组有序的数据序列(顺序很重要),按操作类型:输入和输出流(input/output);
抽象类InputStream是所有字节(占8位空间)输入流的父类
抽象类Reader是所有字符输入流的父类
抽象类OutputStream是所有字节输出流的父类
抽象类Writer是所有字符输出流的父类
字符的编码依赖于编码方式,不是唯一的;字节序列<编码方式>串;字符在机器的内存中表示为:unicode-16编码格式;字节编码与字符的转换:String类String(byte[] b, int start, int len, String codeName), InputStreamReader int read() 返回-1表示流结束,否则是字符(需要强制转换)。
键盘输入:System.in,字节输入
InputStreamReader,字符输入
BufferedReader整行字符的输入(串)
BufferedReader bs = new BufferedReader(new InputStreamReader(System.in));
String s = bs.readLine();System.out.println(s);
键盘输入原理
BufferedReader br =new BufferedReader(new InputStreamReader(System.in));
InputStream ins = new FileInputStream(“d:/a.txt”);//指明路径
文本文件(人可识别的字符,行的序列,不能随机访问<行的长度不确定>)
二进制文件(高度结构化,机器识别,字节的序列,可随机访问)
二进制文件的读写
直接操作字节FileInputStream FileOutputStream
与平台无关的读写DataInputStream DataOutputStream
与编码有关,先把串转换为byte[]
Java Scanner类:通过Scanner类来获取用户的输入
next()与nextLine()区别
next()
1、一定要读取到有效字符后才可以结束输入。
2、对输入有效字符之前遇到的空白,next()方法会自动将其去掉。
3、只有输入有效字符后才将其后面输入的空白作为分隔符或者结束符。
next()不能得到带有空格的字符串
nextLine()
1、以Enter为结束符,也就是说nextLine()方法返回的是输入回车之前的所有字符。
2、可以获得空白。
用键盘输入一个数:(从控制台获取数据)
使用Scanner类
Scanner s1= new Scanner(System.in);
a = s1.nextInt();
//nextInt(),将输入信息的下一个标记扫描为一个int。如果下一个标记不能转换为有效的 int 值,则此方法将抛出 InputMismatchException。
Scanner s2= new Scanner(System.in);
String s = s2.nextLine(); //nextLine()
使用IO数据流
InputStreamReader reader = new InputStreamReader(System.in);
BufferedReader input = new BufferedReader(reader);
//BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
n = Integer.parseInt(input.readLine());//readLine(),转换为itn型
//InputStreamReader 是字节流通向字符流的桥梁:它使用指定的 charset 读取字节并将其解码为字符。
//它使用的字符集可以由名称指定或显式给定,或者可以接受平台默认的字符集。