D:/io.txt 的内容如下: FielInputStream 测试
1. FileInputStream字节流输入流测试
package com.io;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
public class T001_FileInputStream {
public static void main(String[] args) {
int b=0;
FileInputStream in=null;
//读取只指定文件、没有找到就退出
try {
in=new FileInputStream("D:/io.txt");//读取指定文件
} catch (FileNotFoundException e) {
e.printStackTrace();
System.out.println("没有找到指定文件");
System.exit(-1);//退出
}
//如果读到指定文件、就遍历打印出来内容
try {
//统计读了多少个字节文件
long num=0;
//开始读、把读取到的文件字节赋给b变量、如果说文件已经读完则返回-1
while((b=in.read())>-1){
//将读取到的字节文件以字符的形式输出
System.out.print((char)b);
num++;
}
in.close();
System.out.println("共读取"+num+"个字节文件");
} catch (IOException e) {
e.printStackTrace();
System.out.println("文件读取出错");
System.exit(-1);
}
}
}
总结:
打印结果:FielInputStream ????共读取20个字节文件
思 考:为什么io.txt中的中文打印出来的是问号了,因为我们这里使用的是字节流,是一个字节一个字节的往里读,而一个汉字占2个字节,所以改为FileReader字符流就可以了
2.FileOutputStream字节流输出流测试
package com.io;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class T002_FileOutputStream {
public static void main(String[] args) {
int b=0;
FileInputStream in=null;
FileOutputStream out=null;
try {
//读取指定文件
in=new FileInputStream("D:/io.txt");
//将读取到的指定文件io.txt内容写入到目标文件io2.txt中去
//注意如果io2.txt文件不存在,FileOutputStream会自动帮你建立一个文件
out=new FileOutputStream("D:/io2.txt");
//开始读、把读取到的文件字节赋给b变量、如果说文件已经读完则返回-1
while((b=in.read())>-1){
//将读取到的文件内容写入目标文件io2.txt
out.write(b);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
System.out.println("没有找不到指定文件");
System.exit(-1);//退出
} catch (IOException e) {
e.printStackTrace();
System.out.println("文件复制错误");
System.exit(-1);
}
System.out.println("文件复制成功");
}
}
思考:
阅读上述程序我们可以借助FieInputStream和FileOutputStream的特性完成文件的上传
3.FileReader FileWriter字符流输出流测试
package com.io;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class T003_FileReaderFileWriter {
public static void main(String[] args) {
int b=0;
FileReader reader=null;
FileWriter writer=null;
try {
//读取指定文件
reader=new FileReader("D:/io.txt");
//将读取到的指定文件io.txt内容写入到目标文件io2.txt中去
//注意如果io2.txt文件不存在,FileOutputStream会自动帮你建立一个件
writer=new FileWriter("D:/io3.txt");
//开始读、把读取到的文件字节赋给b变量、如果说文件已经读完则返回-1
while((b=reader.read())>-1){
//将读取到的文件内容写入目标文件io2.txt
writer.write(b);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
System.out.println("没有找不到指定文件");
System.exit(-1);//退出
} catch (IOException e) {
e.printStackTrace();
System.out.println("文件复制错误");
System.exit(-1);
}
System.out.println("文件复制成功");
}
}
4.BufferedReader BufferedWriter缓冲流(处理流)测试
package com.io;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
//Buffered
public class T004_BufferedReader_Writer {
public static void main(String[] args) {
try {
//形象思维:采用FilerWriter字符流往目标文件io.txt里写内容,
//但是由于该接口不好用所以在外面套一层'管子'BufferedWriter往里写
BufferedWriter bfw =new BufferedWriter(new FileWriter("D:/io4.txt"));
//形象思维:采用FileReader字符流读取目标文件io.txt里的内容,
//但是由于该接口不好用所以在外面套一层'管子'BufferedReade往外读
BufferedReader bfr=new BufferedReader(new FileReader("D:/io4.txt"));
//我们来测试一下,先写进去,再读出来
String s=null;
//写
for (int i = 0; i < 10; i++) {
s=String.valueOf(Math.random());
bfw.write(s);//写入
bfw.newLine();//写一串字符,换一行
}
bfw.flush();//保证全部写进去
//读,一行一行的往外读,显示
while ((s=bfr.readLine())!=null) {
System.out.println(s);
}
bfw.close();
bfr.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
5
package com.io;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
//转换流
public class T005_TestTransForm {
public static void main(String[] args) {
//将写入的字节流内容转换成字符流再写入指定的文件
try {
//指定了true在写入的时候就是在原有文件上追加内容,否则就是覆盖
OutputStreamWriter osw=new OutputStreamWriter(new FileOutputStream("D:/io.txt",true),"GBK");
osw.write("你好");
System.out.println(osw.getEncoding());
osw.close();
} catch (FileNotFoundException e) {
System.out.println("没有找到指定的文件");
System.exit(-1);
} catch (IOException e) {
System.out.println("写入失败");
System.exit(-1);
}
System.out.println("写入成功");
}
}
6
package com.io;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
//转换流
public class T006_TestTransForm {
public static void main(String[] args) {
//将输入的字节内容转换成字符流
InputStreamReader isr=new InputStreamReader(System.in);
//为了能够一行一行的读取数据,在isr上加了一层处理流
BufferedReader bfr=new BufferedReader(isr);
String s =null;
try {
s = bfr.readLine();
//如果说读取到的s不为null,并且s不等于exit就打印显示出输入的数据
while (s!=null) {
if(s.equalsIgnoreCase("exit")){
break;
}else{
System.out.println(s.toUpperCase());
s=bfr.readLine();
}
}
bfr.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
7
package com.io;
import java.io.*;
public class T007_DataStream {
public static void main(String[] args) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
DataOutputStream dos = new DataOutputStream(baos);
try {
dos.writeDouble(Math.random());
dos.writeBoolean(true);
ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
System.out.println(bais.available());
DataInputStream dis = new DataInputStream(bais);
System.out.println(dis.readDouble());//先存的先取出来
System.out.println(dis.readBoolean());
dos.close(); dis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
8
package com.io;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintStream;
import java.util.Date;
public class T008_PrintStream1 {
public static void main(String[] args) {
PrintStream ps = null;
try {
//写了true为追加,否则覆盖原文件内容
FileOutputStream fos = new FileOutputStream("D:/io.txt",true);
ps = new PrintStream(fos);
} catch (IOException e) {
e.printStackTrace();
}
if(ps != null){
//改变print输出方向,默认在控制台输出,
//现在改为向d:/io.txt中输出
System.setOut(ps);
}
for(char c = 0; c <= 10 ;c++){
//向目标文件中打印进去10条随机数
System.out.println(Math.random());
}
}
}
9
package com.io;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.PrintStream;
public class T009_PrintStream {
public static void main(String[] args) {
//args[0]接收目标文件参数
String filename ="D:/io.txt";
if(filename!=null){
list(filename,System.out);
}
}
public static void list(String f,PrintStream fs){
try {
BufferedReader br = new BufferedReader(new FileReader(f));
String s = null;
while((s=br.readLine())!=null){
//打印显示
fs.println(s);
}
br.close();
} catch (IOException e) {
fs.println("无法读取文件");
}
}
}
10
package com.io;
import java.io.BufferedReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Date;
public class T010tPrintStream {
public static void main(String[] args) {
String s = null;
//接收输入
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
try {
//向目标文件追加写入得信息,log4j
FileWriter fw = new FileWriter("D:/io.txt",true);
PrintWriter log = new PrintWriter(fw);
//如果输入的信息不为null并且不是exit,就将信息记入目标文件
while ((s = br.readLine())!=null) {
if(s.equalsIgnoreCase("exit")){
break;
}else{
log.println("开始操作---"+new SimpleDateFormat("yyyy-MM-dd HH:mm:ss E").format(new Date()));
log.println(s.toUpperCase());
log.println("操作结束---"+new SimpleDateFormat("yyyy-MM-dd HH:mm:ss E").format(new Date()));
log.println();
}
}
log.flush();
log.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
直接将对象存盘
package com.io;
import java.io.*;
public class T011ObjectIO {
public static void main(String args[]) throws Exception {
T t = new T();//实例化对象
t.k = 8;//重新指定k的值,如果k被transient了k默认为0
//写入对象
FileOutputStream fos = new FileOutputStream("D:/io.txt");
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(t);
oos.flush();
oos.close();
//读取对象
FileInputStream fis = new FileInputStream("D:/io.txt");
ObjectInputStream ois = new ObjectInputStream(fis);
T tReaded = (T)ois.readObject();
System.out.println(tReaded.i + " " + tReaded.j + " " + tReaded.d + " " + tReaded.k);
}
}
class T implements Serializable{//序列化
int i = 10;
int j = 9;
double d = 2.3;
//k被transient透明化了,即k值不予考虑默认为0;
transient int k = 15;
}
java IO 流
最新推荐文章于 2022-04-18 10:18:23 发布