Java流(Stream)/文件(File)/IO

来源:互联网 发布:c语言使用cos函数 编辑:程序博客网 时间:2024/06/05 00:23

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 读取字节并将其解码为字符。

//它使用的字符集可以由名称指定或显式给定,或者可以接受平台默认的字符集。