java的输入输出流类
处理字节流:输入流类(IntputStream)、输出流类(OutputStream)
处理字符流:输入流类(Reader)、输出流类(Writer)
IntputStream类(抽象类):是所有其它具体的字节输入流类的父类,如其(子类)FileIntputStream类 实现打开文件并读取文件的任务,其read()方法,实现了从打开的文件输入流按字节读取数据;BuffereIntputStream类 提供数据缓冲功能,加快读文件的速度;DataIntputStream类的对象完成各种java数据类型的数据读取工作。
常用方法:read() 从输入流读入数据,只能逐字节读取输入数据
skip(long n) 将指针从当前位置向后跳动n个字节
mark() 在指针位置做一个标记
Reset() 将指针移动到标记位置
close() 关闭输入流
OutputStream类(抽象类):是所有其它具体的字节输出流类的父类,如其(子类)如其(子类)FileOutputStream类 ,提供了向文件写入字节的write()方法,实现了连接数据文件的能力,并实现按字节写文件;BuffereOutputStream类 提供数据缓冲区,包装FileOutputStream对象,加快读文件的速度;DataOutputStream类 提供了将java基本类型写入数据流的方法。
常用方法:writer() 向输出流写入数据,只能逐字节输出数据
flush() 在具有缓冲功能的子类对象中,强制清空缓冲区
close() 关闭输出流
Reader类:从输入流读入数据,为抽象类。字符输入流类的父类,子类有FileReader类,BuffereReader类等
常用方法:read() 从输入流读入数据,只能逐字节读取输入数据
skip(long n) 将指针从当前位置向后跳动n个字节
mark() 在指针位置做一个标记
Reset() 将指针移动到标记位置
close() 关闭输入流
Writer类:向输出流写入数据,为抽象类。字符输出流类的父类,子类有FileWriter类,BuffereWriter类,PrintWrite类(格式化)等
常用方法:writer() 向输出流写入数据,只能逐字节输出数据
flush() 在具有缓冲功能的子类对象中,强制清空缓冲区
close() 关闭输出流
import java.io.*; public class Test{ System.out.printIn("读写文件测试"); FileOutputStream a=new FileOutputStream("mydata.dat"); BufferedOutputStream b=new BufferedOutputStream(a); DataOutputStream c=new DataOutputStream(b); //写入数据流 c.writerChar("中"); c.writerBoolean(true); c.writerInt(10); c.close();//关闭文件
char x=C.readChar();FileIntputStream A=new FileIntputStream("mydata.dat"); BufferedIntputStream B=new BufferedIntputStream(A); DataIntputStream C=new DataIntputStream(B); //读出数据流
boolean y=C.readBoolean();
int z=C.readInt();
C.close();
System.out.printIn("字符=" +x+ "\n布尔=" +y+ "\n整形数="+z+)}
结果:读写文件测试
字符=中
布尔=true
整形数=10
从键盘输入字符串
string x;
InputStreamReader a=new InputStreamReader(System.in);
BufferedReader b=new BufferedReader(a);//为字符输入提供了数据缓冲功能
x=b.readLine();//reader类读字符数据
PrintWriter c=new PrintWriter(b); c.printIn(x); c.flush() ;//write类写字符数据,将读取的数据写目标文件夹中
System.out.printIn("你输入的字符串是:"+x);
//InputStreamReader类用于从标准输入设备读取字节流,并把它们转换成字符流。BufferedReader接收InputStreamReader类,BufferedReader对象的方法readerLine()读取字符串
查看目录中的文件和子目录名称 import java.io.*; public class ListDir{ public static void main(String[] args){ //创建File类对象 File a=new File("c:/文件.txt"); if(a.isDirectory(){//判断a是否是目录 //输出要查看的的文件目录 System.out.printIn("当前目录为:"+a.getAbsolutePath()); String b[]=a.list();//以字符串数组的形式返回当前file对象表示的目录下的文件和子目录 //输出目录下的文件和子目录名称 for(int i=0;i<b.length;i++){ //为a文件创建子目录b[i] File c=new File(a,b[]);//File对象的构造方法之一:File file=new File(父目录,子目录名) if(c.isFile()){ System...("是文件");} else if(c.isDirectory()){ System...("是目录"); }})}} 创建源文件: File类对象.createNewFile(); 判断文件是否创建成功: File类对象.exists(); 移动文件到File类对象1: File类对象.renameTo(File类对象1); 删除文件: File类对象.delete(); 判断目录是否建立成功: File类对象.mkdir(); 复制文件内容: File a=new File("c:/文件.txt");//创建源文件 BufferedReader b=new BuffereReader(new FileReader(a)); String x=b.readerLine();//读取源文件到x File c=new File("c:/文件1.txt");//创建目标文件 BufferedWriter d=new BuffereWriter(new FileWriter(c)); PrintWriter e=new PrintWriter(d); e.printIn(x);//将读取的源文件内容x写入目标文件
读写二进制机制(使用NIO机制创建二进制文件的复制程序)
新的输入输出(NIO)库,是对I/O的优化
import java.io.*;
import java.nio.*;
import java.nio.channels.*;
public class NioCopyFile{
public static void main(String [] args) throws IOException{
//创建文件输入流对象
FileInputStream fin=new FileInoutStream(args[0]);
//创建通道对象(通道是双向的,可读数据,也可写数据)
FileChannel fcin=fin.getChannel();
ByteBuffer bbf=ByteBuffer.allocate(1024);//CharBuffer ShortBurrer Int/Double/Long/FloatBuffer共7种缓冲区类型//创建文件输出流对象 FileOutputStream fout=new FileOutoutStream(args[1]); //创建通道对象 FileChannel fcout=fout.getChannel(); //创建通道需要使用的ByteBuffer对象,并向其中填充数据
int r=fcin .read(bbf);//通道读取数据
while(r!=-1){
bbf.flip(); //反转缓冲区为输出数据做准备
fcout.write(bbf);//通道对象将缓冲区的数据写入文件
bbf.clear(); //在读入数据之前,要清楚缓冲区
r=fcin.read(bbf);
}
fcin.close();
fcout.close();
}
}