第十周课程总结
流的分类
1.Java的字节流
InputStream是所有字节输入流的祖先,而OutputStream是所有字节输出流的祖先。
2.Java的字符流
Reader是所有读取字符串输入流的祖先,而writer是所有输出字符串的祖先。
InputStream,OutputStream,Reader,writer都是抽象类。所以不能直接new
字节流
1、当把数据传到程序中的操作叫输入,用InputStream类。
2、当把数据从程序中传出的操作叫输出,用OutputStream类。
字符流
1、字符输出流:Writer。
2、字符输入流:Reader。
字节-字符转换流
OutputStreamWriter和InputStreamReader
在整个IO包中,实际上就是字节流和字符流,但是除了这两个流之外,还存在一组字节流-字符流的转换类。
•OutputStreamWriter:是Writer的子类,将输出的字符流转换为字节流。即:将一个字节流的输出对象变为字节流的输出对象
•InputStreamReader:是Reader的子类,将输入的字节流变为字符流,即:将一个字节流的输入对象变为字符流的输入对象。
在构造方法中,如果将append的值设置为true,则表示在文件的末尾追加内容。
文件中换行为:
。
FileInputStream 常用的构造方法主要有如下两种重载形式。
FileInputStream(File file):通过打开一个到实际文件的连接来创建一个 FileInputStream,该文件通过文件系统中的 File 对象 file 指定。
FileInputStream(String name):通过打开一个到实际文件的链接来创建一个 FileInputStream,该文件通过文件系统中的路径名 name 指定。
1 、要格式化输出: PrintStream, PrintWriter
flush(): 刷新缓冲区
close(): 关闭流对象–>先刷新,再关闭
字节流与字符流的区别
字节流在操作的时候本身是不会用到缓冲区(内存)的,是与文件本身直接操作的,而字符流在操作的时候是使用到缓冲区的。
字节流在操作文件时,即使不关闭资源(close方法),文件也能输出,但是如果字符流不使用close方法的话,则不会输出任何内容,
说明字符流用的是缓冲区,并且可以使用flush方法强制进行刷新缓冲区,这时才能在不close的情况下输出内容。
转换流
OutputStreamWriter 是字符流通向字节流的桥梁:可使用指定的字符编码表,将要写入流中的字符编码成字节,将字符串按照指定的编码表转成字节,在使用字节流将这些字节写出去。
字节--->字符 : 看不懂的--->看的懂的。 需要读。输入流。 InputStreamReader
字符--->字节 : 看的懂的--->看不懂的。 需要写。输出流。 OutputStreamWriter
内存流
字节数组:
ByteArrayInputStream
ByteArrayOutputStream
字符数组
CharArrayReader
CharArrayWriter
字符串
StringReader
StringWriter
管道流
PipedOutputStream和PipedInputStream分别是管道输出流和管道输入流。这个两个流必须同时使用。
打印流
一:System类当中的方法:
System.in; 标准的输入流: 默认是键盘录入
System.out; 标准的输出流: 默认是输出到控制台。
System.setIn(InputStream in); 改变来源。
System.setOut(PrintStream ps);
二:PrintStrea PrintStream(File file)
创建具有指定文件且不带自动行刷新的新打印流。
PrintStream(File file, String csn)
PrintStream(OutputStream out) ;
PrintStream(OutputStream out, boolean autoFlush) ;自动刷新。
PrintStream(String fileName)
把奇数位上的小写字符换成大写。
package 二;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
public class X {
public static void main(String[]args)throws Exception{
File f=new File("d:"+File.separator+"test.txt");
OutputStream out=null;
out =new FileOutputStream(f);
String str="helloworld";
byte a[]=str.getBytes();
for(int i=0;i<a.length;i++) {
if(i%2==0&&a[i]>='a'&&a[i]<='z') {
a[i]=(byte)(a[i]-32);
}
}
out.write(a);
out.close();
}
}
这个难度不大,以为老师已经讲过了,这题我是把老师讲过的输出奇数位上的字符,和把字符换成大写输出两个问题结合到一起了。
这就是我本周的学习内容总结。