第十周作业
实验代码
package ddd;
import java.io.File;
import java.io.IOException;
import java.io.FileOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.OutputStream;
import java.io.InputStream;
public class hhh {
private static boolean ture;
public static void main(String[] args) throws Exception {
String d="d:"+File.separator+"test.txt";
OutputStream out=null;
try {
out= new FileOutputStream(d,ture);
String str="Hello World";
byte b[]=str.getBytes();
for(int i=0;i<b.length;i=i+2) {
if(b[i]<='z'&&b[i]>='a') {
b[i]=(byte)(b[i]-32);
}
}
out.write(b);
out.close();
System.out.print(new String(b));
} catch (FileNotFoundException e) {
e.printStackTrace();
e.printStackTrace();
}
}
}
实验结果截图
实验代码
package ddd;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
public class sff {
public static void main(String args[]) throws Exception {
String f="d:"+File.separator+"test.txt";
InputStream input =null;
input=new FileInputStream(f);
byte a[]=new byte[(int)f.length()];
for(int i=0;i<a.length;i=i+2) {
if(a[i]<='z'&&a[i]>='a') {
a[i]=(byte)(a[i]-32);
}
}
input.read(a);
input.close();
System.out.print(new String(a));
}
}
实验结果截图
学习总结
字节流与字符流在Java中io操作步骤如下:(以文件为例)
1通过File类打开一个文件 。
2通过字节流或字符流的子类指定输出位置。
3经行读写操作。
4关闭输入输出。
字节流:
字节流以操作byte类型数据为主,主要操作类为OutputStream类和InputSream类。
字节输出流OutputStream是整个IO包中字节输出流最大父类,其操作方法见书P380 表12-3。
字节输入流InputSream为抽象类,需依靠子类,其主要方法见书p384 表12-4。
字符流:
字符输出流Writer本身也是个抽象类,常用方法见书p388 表12-5。
字符输入流Reader是用字符的方法从文件中取出数据,它也是个抽象类,常用方法见书p390 表12-6。
字节流和字符流除了操作代码不同外,字符流还比字节流多出缓存区。
字节流在操作的时候本身是不会用到缓冲区的,是与文件本身直接操作的,而字符流在操作的时候是使用到缓冲区的。
字节流在操作文件时,即使不关闭资源,文件也能输出,但是如果字符流不使用close方法的话,则不会输出任何内容。
字符流的缓冲区,可以使用flush方法强制进行刷新缓冲区,这时可以在不close的情况下输出内容。
字节-字符转换流
OutputStreamWriter和InputStreamReader
在整个IO包中除了这两个流之外,还存在字节流-字符流的转换类。
OutputStreamWriter:是Writer的子类,将输出的字符流转换为字节流。即:将一个字节流的输出对象变为字节流的输出对象
InputStreamReader:是Reader的子类,将输入的字节流变为字符流,即:将一个字节流的输入对象变为字符流的输入对象。
在构造方法中,如果将append的值设置为true,则表示在文件的末尾追加内容。
FileInputStream 常用的构造方法主要有如下两种重载形式。
FileInputStream:通过打开一个到实际文件的连接来创建一个 FileInputStream,该文件通过文件系统中的 File 对象 file 指定。
FileInputStream:通过打开一个到实际文件的链接来创建一个 FileInputStream,该文件通过文件系统中的路径名 name 指定。
要格式化输出: PrintStream, PrintWriter
flush():刷新缓冲区
close(): 关闭流对象,先刷新,再关闭
转换流:
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)