阿克斯java表_io流--字节流-字符流

返回值readerline 返回值是String,得用String来接

掉什么方法就用什么来接

程序中的输入输出都是以流的形式保存的,流中保存的实际上全都是字节文件。

操作流程

在Java中IO操作也是有相应步骤的,以文件操作为例,主要的操作流程如下:

使用File类打开一个文件

通过字节流或字符流的子类,指定输出的位置

进行读/写操作

关闭输入/输出

IO操作属于资源操作,一定要记得关

字节流

FileInputStream从文件系统中的某个文件中获得输入字节。

FileOutputStream可用来写入数据到文件

字节输出流OutputStream  :以Stream结尾的就是字节流

字节流主要是操作byte类型数据,以byte数组为准,主要操作类就是OutputStream、InputStream

OutputStream此抽象类,是表示输出字节流的所有类的超类。操作的数据都是字节,定义了输出字节流的基本共性功能方法。

此类是一个抽象类,如果想要使用此类的话,则首先必须通过子类实例化对象,那么如果现在要操作的是一个文件,则可以使用:FileOutputStream类。通过向上转型之后,可以为OutputStream实例化

FileOutputStream类

OutputStream有很多子类,其中子类FileOutputStream可用来写入数据到文件。

FileOutputStream类,即文件输出流,是用于将数据写入 File的输出流。

输出流中定义都是写write方法

6b583f2efd12afcac6d0ed14743ccfaa.png

代码演示

packagecom.oracle.demo01;importjava.io.FileNotFoundException;importjava.io.FileOutputStream;importjava.io.IOException;public classDemo01 {public static void main(String[] args) throwsIOException {//文件输出流//如果指定文件不存在,则创建//如果指定文件存在则覆盖

FileOutputStream fos=new FileOutputStream("D:\\demo06\\o.txt",true);//添加true进行续写。,默认是false不进行续写,内容将会被覆盖//写入方法一。----向文件中单个字节写入//调用父类中的write方法。

fos.write(100);//走阿斯克码表,对应值d//写入方法二-------向文件中写入字节数组

byte[] by={66,67,68,69};//

//调用父类中的write方法。

fos.write(by);byte[] bys={-66,-67,-68,-69};///

fos.write(bys,1,2);//从下标1开始写入两个//释放资源

fos.close();

}

}

文件的续写和换行:

3fc9db7ec44d67adcb9bf194a94c6ccf.png

续写:在构造方法中,如果将append的值设置为true,则表示在文件的末尾追加内容。则表示在文件的末尾追加内容。默认值为false,内容将会被覆盖

l   给文件中续写数据和换行,代码演示:

publicclass FileOutputStreamDemo2 {

publicstaticvoid main(String[] args)throwsException {

File file= new File("c:\\file.txt");//FileOutputStream fos= new FileOutputStream(file, true);[L1] 设置给指定文件续写数据

String str= "\r\n"[L2] +"aaa";实现换行

fos.write(str.getBytes());

fos.close();

}

}

Io的异常处理

packagecom.oracle.demo01;importjava.io.FileNotFoundException;importjava.io.FileOutputStream;importjava.io.IOException;public classdemo02 {public static voidmain(String[] args) {//明确目的地

FileOutputStream fos=null;try{

fos= new FileOutputStream("D:\\demo0611\\o.txt",true);//true开启续写功能

String str="\r\n"+"你好";//写入一个字节数组

fos.write(str.getBytes());

}catch(FileNotFoundException e) {//TODO Auto-generated catch block

e.printStackTrace();

}catch(IOException e) {//TODO Auto-generated catch block

e.printStackTrace();

}finally{//释放资源//一定要判断fos是否为null,只有不为null时,才可以关闭资源

if(fos!=null){try{

fos.close();

}catch(IOException e) {//TODO Auto-generated catch block

e.printStackTrace();

}

}

}

}

}

字节输入流InputStream

。InputStream此抽象类,是表示字节输入流的所有类的超类。

InputStream有很多子类,其中子类FileInputStream可用来读取文件内容。

FileInputStream 从文件系统中的某个文件中获得输入字节。

l    read():返回值为int,读取一个字节并返回,没有字节返回-1.

l   read(byte[]):返回值为int, 读取一定量的字节数,并存储到字节数组中,返回读取到的字节数。

代码展示

public static void main(String[] args) throwsIOException {//明确数据源(从那里读,不需要创建)

FileInputStream fis=new FileInputStream ("D:\\demo0611\\o.txt");//单个读出字节读取文件

int len =0;while ((len=fis.read())!=-1){

System.out.println((char)len); //因为len是int数值需要强转成char字符,也安装阿克斯码表的数值转的字符,

}//释放资源

fis.close();

}

}

字节数组读出

public static void main(String[] args) throwsIOException {//明确数据源(明确数据源)

FileInputStream fis=new FileInputStream ("D:\\demo0611\\o.txt");byte[] bytes=new byte[1024];//1024//一个字节一个字节数组读取

int len =0;while((len=fis.read(bytes))!=-1){//将字节数组转换为字符串打印

System.out.println(new String(bytes,0,len));//这里是把bytes数组转成了String字符打印;(bytes,0,len)这里的0是从数组下标0开始打印长度是len也就是传的字符个数,这样 就避免了重复打印最后一个字符的问题

}

fis.close();

}

}

复制文件—字节

638d15aedfec6045095ac2758d75c39f.png

过程:

获取目的地文件  FileInputStream进行读取  .read()

复制的目的文件   FileOutputStream进行写入 .write()

//单个字节数组复制文件

public static void get() throwsIOException {//获取数据来源

FileInputStream fis= new FileInputStream("D:\\demo0611\\cc.wmv");//获取复制的目的地

FileOutputStream fos=new FileOutputStream("D:\\demo0611\\a\\cc.wmv");//建立数组

byte[] by=new byte[1024];int len=0;long time =System.currentTimeMillis();while((len=fis.read(by))!=-1){

fos.write(by,0,len);

}long time2=System.currentTimeMillis();

fis.close();

fos.close();

System.out.println(time2-time); //3592//}

//单个字符复制文件

public static void getone() throwsIOException{//获取数据来源//获取数据来源

FileInputStream fis= new FileInputStream("D:\\demo0611\\cc.wmv");//获取复制的目的地

FileOutputStream fos=new FileOutputStream("D:\\demo0611\\a\\cc.wmv");//单个字节复制文件按

int len=0;long time =System.currentTimeMillis();while((len=fis.read())!=-1)

{

fos.write(len);

}long time2=System.currentTimeMillis();

fis.close();

fos.close();

System.out.println(time2-time); //1984605

}

非文本传输用字节流(如zip,jpg,视频等文件)

(一帮传的是看不懂的文件如java的class文件);文本文件传输用字符流(如:word,txt)

(一般是可以看懂的文件)

字符流

字符输入流Reader

以Reader结尾的就是字符流

,Reader,读取字符流的抽象超类。

l   read():返回值是int,读取单个字符并返回

l   read(char[]):返回值是int,将数据读取到数组中,并返回读取的个数。

使用FileReader读取包含中文的文件

public static void main(String[] args) throwsIOException {//明确数据源

FileReader fr=new FileReader("D:\\demo0611\\o.txt");//读单个字符

int len=0;while((len=fr.read())!=-1){

System.out.print((char)len);

}//释放资源

fr.close();

}

单个字符数组读取

packagecom.oracle.demo02;importjava.io.FileNotFoundException;importjava.io.FileReader;importjava.io.IOException;public classdemo02 {public static void main(String[] args) throwsIOException {//明确目的地

FileReader fr=new FileReader("D:\\demo0611\\o.txt");//建立数组

char[] ch=new char[1024];//

int len=0;while ((len=fr.read(ch))!=-1)

System.out.println(new String(ch,0,len));

}//释放资源

fr.close();

}

}

字符输出流Writer

packagecom.oracle.demo02;importjava.io.FileWriter;importjava.io.IOException;public classdemo03 {public static void main(String[] args) throwsIOException {//明确目的地

FileWriter fw=new FileWriter("D:\\demo0611\\utf8.txt",true);//开启续写功能加true//写入一个字符

fw.write(100);//字符流需要刷一下,才能显示字符

fw.flush();//写入一个数组

/*char[] ch={'窝','窝','头','1','块','钱','四','个'};

fw.write(ch,0,8);//指定插入的数组

fw.flush();

//写入一个字符串*/ fw.write("窝窝头。你好");//释放资源

fw.close();

}

}

字符流需要flush刷新一下才会出现复制内容

flush():将流中的缓冲区缓冲的数据刷新到目的地中,刷新后,流还可以继续使用。

close():关闭资源,但在关闭前会将缓冲区中的数据先刷新到目的地,否则丢失数据,然后在关闭流。流不可以使用。如果写入数据多,一定要一边写一边刷新,最后一次可以不刷新,由close完成刷新并关闭。

字符复制文件

单个字符复制

字符数组复制

单个字符复制

public static void main(String[] args) throwsIOException {//明确目的地

FileWriter fw=new FileWriter("D:\\demo0611\\a\\u.txt");//明确数据源

FileReader fr=new FileReader("D:\\demo0611\\o.txt");int len=0;while((len=fr.read())!=-1){

fw.write(len);

fw.flush();

}//释放资源

fw.close();

fr.close();

}

字符数组复制packagecom.oracle.demo02;importjava.io.FileReader;importjava.io.FileWriter;importjava.io.IOException;public classdemo05 {public static void main(String[] args) throwsIOException {//明确目的地

FileWriter fw=new FileWriter("D:\\demo0611\\a\\p.txt");//明确数据源

FileReader fr=new FileReader("D:\\demo0611\\o.txt");//数组

char[] ch=new char[1024];int len=0;while((len=fr.read(ch))!=-1){

fw.write(ch,0,len);

fw.flush();

}//释放资源

fw.close();

fr.close();

}

}

设置给指定文件续写数据

实现换行

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值