java输出1_Java中的输入/输出流(1)

本文详细介绍了Java中的输入输出流概念及其应用。包括字节流和字符流的区别、输入输出流的操作方法,以及如何利用FileInputStream/FileOutputStream和FileReader/FileWriter进行文件数据的读写。
摘要由CSDN通过智能技术生成

原标题:Java中的输入/输出流(1)

9402a02709adc34d565b7bea783420e1.png

为了更好的帮助大家便利的学习java这门编程语言,和更好的巩固java语言学习中的基础知识,我们特意为大家精心制作了java程序设计精编教程。

本教程精选java核心内容,结合实例,循序渐进的向大家介绍Java语言。以零基础讲解为基础,用实例引导大家学习,深入浅出的向大家介绍java的相关知识和实战技能。

Java入门(35)

上一节课我们学习了用过java.io.File类,处理文件的基本属性。

今天学习如何处理文件中的内容,保存在文件中的数据。

1.如何处理文件中的内容?

通过java提供输入输出流;来处理文件中的内容数据。

2.什么是流?

电流:负电荷的正向移动轨迹

水流:水的移动轨迹。

Java中的流:数据的移动轨迹。

3.什么是输入输出流?

按照数据的流向:

输入流:数据从本程序之外的地方[文件]引入到本程序中时所形成的移动轨迹就是输入流。

【读取数据】

输出流:数据从本程序中流向本程序之外的地方[文件]所形成的移动轨迹就是输出流。

【写出数据】

4.流的另一个分类

按照每一次读写数据的量:

1.字节流:每一次可以读/写,一个字节,8位2进制数据的量,由于所有的数据都可以转换成字节,因此字节流可以处理任何类型的数据【文本,图片,视频,音频....】

2.字符流:每一次可以读/写,一个字符,16位2进制数据的量,只能处理文本型数据【word文档,记事本文件】,不能处理图片,视频,音频这些类型的文件。

5.字节流:

按照数据的流向:

字节输出流【写出数据】

在java中表示字节输出流使用OutputStream类

OutputStream类是一个抽象类,不能通过new的方式创建对象,需要借助子类来创建对象。

OutputStream抽象类是字节输出流的顶级父类。

FileOutputStream类是OutputStream抽象类的子类。

FileOutputStream类能通过new的方式创建对象。

java.io. FileOutputStream

public class FileOutputStream extends OutputStream

构造方法摘要

FileOutputStream(File file)通过File对象创建一个字节输出流。

参数:File file--指定数据输出位置

FileOutputStream(File file, boolean append) 通过File对象创建一个可以追加内容的字节输出流。

参数1:File file--指定数据输出位置

参数2:boolean append--指定是否追加

FileOutputStream(String name) 通过String对象创建一个字节输出流。

参数:String name--指定数据输出位置

FileOutputStream(String name, boolean append) 通过String对象创建一个可以追加内容的字节输出流。

参数1:String name--指定数据输出位置

参数2:boolean append--指定是否追加

例如:

package com.click369.test1;

import java.io.File;

import java.io.FileOutputStream;

import java.io.OutputStream;

public class TestMain {

public static void main(String[] args) throws Exception{

//FileOutputStream的构造方法

//FileOutputStream(File file)通过File对象创建一个字节输出流。

//参数:File file--指定数据输出位置

File file1=new File("F:"+File.separator+"20191015"+File.separator+"test"+File.separator+"file1.txt");

FileOutputStream out1=new FileOutputStream(file1);

OutputStream out2=new FileOutputStream(file1);

//FileOutputStream(File file, boolean append) 通过File对象创建一个可以追加内容的字节输出流。

//参数1:File file--指定数据输出位置

//参数2:boolean append--指定是否追加

File file2=new File("F:"+File.separator+"20191015"+File.separator+"test"+File.separator+"file1.txt");

FileOutputStream out3=new FileOutputStream(file2,true);

OutputStream out4=new FileOutputStream(file2,true);

//FileOutputStream(String name) 通过String对象创建一个字节输出流。

//参数:String name--指定数据输出位置

String path1="F:"+File.separator+"20191015"+File.separator+"test"+File.separator+"file1.txt";

FileOutputStream out5=new FileOutputStream(path1);

OutputStream out6=new FileOutputStream(path1);

//FileOutputStream(String name, boolean append) 通过String对象创建一个可以追加内容的字节输出流。

//参数1:String name--指定数据输出位置

//参数2:boolean append--指定是否追加

String path2="F:"+File.separator+"20191015"+File.separator+"test"+File.separator+"file1.txt";

FileOutputStream out7=new FileOutputStream(path2,true);

OutputStream out8=new FileOutputStream(path2,true);

//只要创建出输出流对象,那么输出流就会自动去创建这个不存在的文件

}

}

40b9f9d636a97f7422f7f6d9658345fc.png

通过输出流对象写出数据:

voidwrite(byte[] b)将字节数组中的所有数据全部写出到字节输出流中。

voidwrite(byte[] b, int off, int len) 将字节数组中的从off开始len个数据写出到字节输出流中。。

voidwrite(int b) 将一个字节的数据写出到字节输出流中。

voidclose 关闭字节输出流

例如:

package com.click369.test2;

import java.io.File;

import java.io.FileOutputStream;

import java.io.OutputStream;

public class TestMain {

public static void main(String[] args) throws Exception{

// voidwrite(byte[] b)将字节数组中的所有数据全部写出到字节输出流中。

//定义一个需要被写出的数据

String info="world";

//创建字节输出流对象

//FileOutputStream(File file, boolean append) 通过File对象创建一个可以追加内容的字节输出流。

//参数1:File file--指定数据输出位置

//参数2:boolean append--指定是否追加

File file2=new File("F:"+File.separator+"20191015"+File.separator+"test"+File.separator+"file1.txt");

FileOutputStream out3=new FileOutputStream(file2,true);

//OutputStream out4=new FileOutputStream(file2,true);

//将String转换成byte[]

byte bytearray[]=info.getBytes;

//调用写方法,写出数据

out3.write(bytearray);

//关闭字节输出流

out3.close;

}

}

package com.click369.test3;

import java.io.File;

import java.io.FileOutputStream;

import java.io.OutputStream;

public class TestMain {

public static void main(String[] args) throws Exception{

//voidwrite(byte[] b, int off, int len)将字节数组中的从off开始len个数据写出到字节输出流中。。

//定义一个需要被写出的数据

String info="worldhello";

//创建字节输出流对象

//FileOutputStream(File file, boolean append) 通过File对象创建一个可以追加内容的字节输出流。

//参数1:File file--指定数据输出位置

//参数2:boolean append--指定是否追加

File file2=new File("F:"+File.separator+"20191015"+File.separator+"test"+File.separator+"file1.txt");

FileOutputStream out3=new FileOutputStream(file2,true);

//OutputStream out4=new FileOutputStream(file2,true);

//将String转换成byte[]

byte bytearray[]=info.getBytes;

//调用写方法,写出数据

out3.write(bytearray,5,5);

//关闭字节输出流

out3.close;

}

}

package com.click369.test4;

import java.io.File;

import java.io.FileOutputStream;

import java.io.OutputStream;

public class TestMain {

public static void main(String[] args) throws Exception{

// voidwrite(int b) 将一个字节的数据写出到字节输出流中。

//定义一个需要被写出的数据

String info="-world";

//创建字节输出流对象

//FileOutputStream(File file, boolean append) 通过File对象创建一个可以追加内容的字节输出流。

//参数1:File file--指定数据输出位置

//参数2:boolean append--指定是否追加

File file2=new File("F:"+File.separator+"20191015"+File.separator+"test"+File.separator+"file1.txt");

FileOutputStream out3=new FileOutputStream(file2,true);

//OutputStream out4=new FileOutputStream(file2,true);

//将String转换成byte[]

byte bytearray[]=info.getBytes;

for(byte by:bytearray){

//调用写方法,写出数据

out3.write(by);

}

//关闭字节输出流

out3.close;

}

}

字节输入流【读取数据】

在java我们使用InputStream类表示一个字节输入流。

InputStream类是一个抽象类,不能通过new的方式创建对象,需要借助子类来创建对象。

InputStream抽象类是字节输入流的顶级父类。

FileInputStream类是InputStream抽象类的子类。

FileInputStream类能通过new的方式创建对象。

java.io FileInputStream

public class FileInputStream extends InputStream

构造方法摘要

FileInputStream(File file) 通过File对象创建一个字节输入流对象。

File file---指定输入位置

FileInputStream(String name) 通过String对象创建一个字节输入流对象。

String name---指定输入位置

例如:

package com.click369.test1;

import java.io.File;

import java.io.FileInputStream;

import java.io.InputStream;

public class TestMain {

public static void main(String[] args) throws Exception{

//FileInputStream 构造方法

//FileInputStream(File file) 通过File对象创建一个字节输入流对象。

//File file---指定输入位置

File file1=new File("F:"+File.separator+"20191015"+File.separator+"test"+File.separator+"file1.txt");

FileInputStream in1=new FileInputStream(file1);

InputStream in2=new FileInputStream(file1);

//FileInputStream(String name) 通过String对象创建一个字节输入流对象。

//String name---指定输入位置

String path1="F:"+File.separator+"20191015"+File.separator+"test"+File.separator+"file1.txt";

FileInputStream in3=new FileInputStream(path1);

InputStream in4=new FileInputStream(file1);

}

}

4ed8faa344bfab1794ab9b5a78608d48.png

通过字节输入流读取数据:

intread从此输入流中读取一个数据字节。

返回值下一个数据字节,如果已到达文件末尾,则返回 -1。

intread(byte[] b) 将数据读取到字节数组中。

返回值是读取的字节总数,如果到达文件末尾返回-1。

intread(byte[] b, int off, int len)将数据读取到的数据保存在字节组的off位置和len个数据

返回值是读取的字节总数,如果到达文件末尾返回-1。

voidclose 关闭字节输入流

例如:

package com.click369.test2;

import java.io.File;

import java.io.FileInputStream;

import java.io.InputStream;

public class TestMain {

public static void main(String[] args) throws Exception{

//int read(byte[] b) 将数据读取到字节数组中。

//返回值是读取的字节总数,如果到达文件末尾返回-1。

//创建输入流对象

File file1=new File("F:"+File.separator+"20191015"+File.separator+"test"+File.separator+"file1.txt");

//FileInputStream in1=new FileInputStream(file1);

InputStream in2=new FileInputStream(file1);

//创建保存数据的字节数组

byte bytearray[]=new byte[(int)file1.length];

//开始读取数据

int len=in2.read(bytearray);

//关闭流

in2.close;

//将保存有数据的字节数组转换成String

//String info=new String(bytearray);

String info=new String(bytearray,0,len);

System.out.println(info);

}

}

package com.click369.test3;

import java.io.File;

import java.io.FileInputStream;

import java.io.InputStream;

public class TestMain {

public static void main(String[] args) throws Exception{

// intread(byte[] b, int off, int len)将数据读取到的数据保存在字节组的off位置和len个数据

//返回值是读取的字节总数,如果到达文件末尾返回-1。

//创建输入流对象

File file1=new File("F:"+File.separator+"20191015"+File.separator+"test"+File.separator+"file1.txt");

//FileInputStream in1=new FileInputStream(file1);

InputStream in2=new FileInputStream(file1);

//创建保存数据的字节数组

byte bytearray[]=new byte[(int)file1.length];

//开始读取数据

int len=in2.read(bytearray,5,10);

//关闭流

in2.close;

//将保存有数据的字节数组转换成String

String info=new String(bytearray);

System.out.println(info);

}

}

package com.click369.test4;

import java.io.File;

import java.io.FileInputStream;

import java.io.InputStream;

public class TestMain {

public static void main(String[] args) throws Exception{

//intread从此输入流中读取一个数据字节。

//返回值下一个数据字节,如果已到达文件末尾,则返回 -1。

//创建输入流对象

File file1=new File("F:"+File.separator+"20191015"+File.separator+"test"+File.separator+"file1.txt");

//FileInputStream in1=new FileInputStream(file1);

InputStream in2=new FileInputStream(file1);

//创建保存数据的字节数组

byte bytearray[]=new byte[(int)file1.length];

int temp=0; //保存被读取的字节数据

int index=0; //数组下标

while((temp=in2.read)!= -1){

bytearray[index]=(byte)temp;

index++;

}

//关闭流

in2.close;

//将保存有数据的字节数组转换成String

String info=new String(bytearray);

System.out.println(info);

}

}

将D盘中的一个图片复制到E盘。

package com.click369.test1;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileOutputStream;

public class CopyDemo {

public static void main(String[] args) throws Exception{

File filrsrc=new File("D:"+File.separator+"test11.jpg");

File filrdesc=new File("E:"+File.separator+"test11.jpg");

//创建字节输入流

FileInputStream in=new FileInputStream(filrsrc);

//创建字节输出流

FileOutputStream out=new FileOutputStream(filrdesc);

//创建保存图片信息的字节数组

byte bytearray[]=new byte[(int)filrsrc.length];

//开始读取

int len=in.read(bytearray);

//写出数据

out.write(bytearray);

//关闭流

in.close;

out.close;

}

}

字符输出流

在java中通过Writer类表示字符输出流。

Writer类是一个抽象类,不能通过new的方式构造对象,需要借助子类完成对象创建。

Writer这个抽象类是字符输出流的顶级父类

FileWriter类是Writer抽象类的子类。

java.io FileWriter

public class FileWriter extends OutputStreamWriter

OutputStreamWriter 继承了 Writer

FileWriter 简介继承 Writer

构造方法摘要

FileWriter(File file) 通过File对象创建一个字符输出流对象。

File file---指定输出位置

FileWriter(File file, boolean append)通过File对象创建一个可以追加的字符输出流对象。

File file---指定输出位置

boolean append---指定是否追加

FileWriter(String fileName) 通过String对象创建一个字符输出流对象。

String fileName---指定输出位置。

FileWriter(String fileName, boolean append)通过String对象创建一个可以追加的字符输出流对象。

String fileName---指定输出位置

boolean append---指定是否追加

例如:

package com.click369.test1;

import java.io.File;

import java.io.FileWriter;

import java.io.Writer;

public class TestMain {

public static void main(String[] args) throws Exception{

//FileWriter构造方法

//FileWriter(File file) 通过File对象创建一个字符输出流对象。

//File file---指定输出位置

File file1=new File("F:"+File.separator+"20191015"+File.separator+"test"+File.separator+"myfile.txt");

FileWriter writer1=new FileWriter(file1);

Writer writer2=new FileWriter(file1);

//FileWriter(File file, boolean append)通过File对象创建一个可以追加的字符输出流对象。

//File file---指定输出位置

//boolean append---指定是否追加

File file2=new File("F:"+File.separator+"20191015"+File.separator+"test"+File.separator+"myfile.txt");

FileWriter writer3=new FileWriter(file2,true);

Writer writer4=new FileWriter(file2,true);

//FileWriter(String fileName) 通过String对象创建一个字符输出流对象。

//String fileName---指定输出位置。

String path1="F:"+File.separator+"20191015"+File.separator+"test"+File.separator+"myfile.txt";

FileWriter writer5=new FileWriter(path1);

Writer writer6=new FileWriter(path1);

//FileWriter(String fileName, boolean append)通过String对象创建一个可以追加的字符输出流对象。

//String fileName---指定输出位置

//boolean append---指定是否追加

String path2="F:"+File.separator+"20191015"+File.separator+"test"+File.separator+"myfile.txt";

FileWriter writer7=new FileWriter(path2,true);

Writer writer8=new FileWriter(path2,true);

}

}

6c9ea2645c64f21e494a75f4a26d9e2c.png

通过字符输出流写出数据需要【写方法】

来自Writer

voidwrite(String str)

写入字符串。

voidwrite(char[] cbuf)

写入字符数组。

来自OutputStreamWriter

voidwrite(char[] cbuf, int off, int len) 将字符数组中的从off开始的len个数据写出到字符输出流。

voidwrite(int c) 一次写出一个字符数据字符输出流。

voidwrite(String str, int off, int len) 将字符串中的从off开始的len个数据写出到字符输出流。

voidclose关闭此流

例如:

package com.click369.test2;

import java.io.File;

import java.io.FileWriter;

import java.io.Writer;

public class TestMain {

public static void main(String[] args) throws Exception{

//voidwrite(char[] cbuf) 写入字符数组。

String info="world";

//创建一个字符输出流对象。

File file1=new File("F:"+File.separator+"20191015"+File.separator+"test"+File.separator+"myfile.txt");

FileWriter writer1=new FileWriter(file1,true);

//Writer writer2=new FileWriter(file1);

//将字符串转换成字符数组

char chararray[]=info.toCharArray;

writer1.write(chararray);

//关闭流

writer1.close;

}

}

package com.click369.test3;

import java.io.File;

import java.io.FileWriter;

import java.io.Writer;

public class TestMain {

public static void main(String[] args) throws Exception{

// voidwrite(char[] cbuf, int off, int len) 将字符数组中的从off开始的len个数据写出到字符输出流。

String info="worldhello";

//创建一个字符输出流对象。

File file1=new File("F:"+File.separator+"20191015"+File.separator+"test"+File.separator+"myfile.txt");

FileWriter writer1=new FileWriter(file1,true);

//Writer writer2=new FileWriter(file1);

//将字符串转换成字符数组

char chararray[]=info.toCharArray;

writer1.write(chararray,5,5);

//关闭流

writer1.close;

}

}

package com.click369.test4;

import java.io.File;

import java.io.FileWriter;

import java.io.Writer;

public class TestMain {

public static void main(String[] args) throws Exception{

// voidwrite(int c) 一次写出一个字符数据字符输出流

String info="-world";

//创建一个字符输出流对象。

File file1=new File("F:"+File.separator+"20191015"+File.separator+"test"+File.separator+"myfile.txt");

FileWriter writer1=new FileWriter(file1,true);

//Writer writer2=new FileWriter(file1);

//将字符串转换成字符数组

char chararray[]=info.toCharArray;

for(char ch:chararray){

writer1.write(ch);

}

//关闭流

writer1.close;

}

}

package com.click369.test5;

import java.io.File;

import java.io.FileWriter;

import java.io.Writer;

public class TestMain {

public static void main(String[] args) throws Exception{

/*

//voidwrite(String str)写入字符串。

String info="hello";

//创建一个字符输出流对象。

File file1=new File("F:"+File.separator+"20191015"+File.separator+"test"+File.separator+"myfile.txt");

FileWriter writer1=new FileWriter(file1,true);

//Writer writer2=new FileWriter(file1);

writer1.write(info);

//关闭流

writer1.close;

*/

//voidwrite(String str, int off, int len) 将字符串中的从off开始的len个数据写出到字符输出流。

String info="worldhello";

//创建一个字符输出流对象。

File file1=new File("F:"+File.separator+"20191015"+File.separator+"test"+File.separator+"myfile.txt");

FileWriter writer1=new FileWriter(file1,true);

//Writer writer2=new FileWriter(file1);

writer1.write(info,0,5);

//关闭流

writer1.close;

}

}

ad0878ccaa27a15492bc3e8544dcd3d8.png

字符输入流

在java中通过Reader类表示字符输入流。

Reader这个类是一个抽象类,不能new,需要子类。

Reader这个类是一个抽象类字符输入流的顶级父类。

FileReader类就是Reader类的子类。

java.io FileReader

public class FileReader extends InputStreamReader

InputStreamReader继承Reader类

FileReader间接继承Reader类

构造方法摘要

FileReader(File file) 通过File对象创建一个字符输入流对象

FileReader(String fileName) 通过String对象创建一个字符输入流对象

例如:

package com.click369.test1;

import java.io.File;

import java.io.FileReader;

import java.io.Reader;

public class TestMain {

public static void main(String[] args) throws Exception{

//FileReader 构造方法

//FileReader(File file) 通过File对象创建一个字符输入流对象

File file1=new File("F:"+File.separator+"20191015"+File.separator+"test"+File.separator+"myfile.txt");

FileReader reader1=new FileReader(file1);

Reader reader2=new FileReader(file1);

//FileReader(String fileName) 通过String对象创建一个字符输入流对象

String path1="F:"+File.separator+"20191015"+File.separator+"test"+File.separator+"myfile.txt";

FileReader reader3=new FileReader(path1);

Reader reader4=new FileReader(path1);

}

}

读取数据

intread读取单个字符。

返回值作为整数读取的字符,范围在 0 到 65535 之间 (0x00-0xffff),如果已到达流的末尾,则返回 -1

intread(char[] cbuf, int offset, int length) 将字符读入数组中的某一部分。

返回值读取的字符数,如果已到达流的末尾,则返回 -1

intread(char[] cbuf) 将字符读入数组。

返回值读取的字符数,如果已到达流的末尾,则返回 -1

voidclose 关闭该流并释放与之关联的所有资源。

例如:

package com.click369.test2;

import java.io.File;

import java.io.FileReader;

import java.io.Reader;

public class TestMain {

public static void main(String[] args) throws Exception{

// intread(char[] cbuf) 将字符读入数组。

//返回值读取的字符数,如果已到达流的末尾,则返回 -1

//创建字符输入流

File file1=new File("F:"+File.separator+"20191015"+File.separator+"test"+File.separator+"myfile.txt");

//FileReader reader1=new FileReader(file1);

Reader reader2=new FileReader(file1);

char chararray[]=new char[(int)file1.length];

int len=reader2.read(chararray);

reader2.close;

String info=new String(chararray,0,len);

System.out.println(info);

}

}

package com.click369.test3;

import java.io.File;

import java.io.FileReader;

import java.io.Reader;

public class TestMain {

public static void main(String[] args) throws Exception{

//intread(char[] cbuf, int offset, int length) 将字符读入数组中的某一部分。

//返回值读取的字符数,如果已到达流的末尾,则返回 -1

//创建字符输入流

File file1=new File("F:"+File.separator+"20191015"+File.separator+"test"+File.separator+"myfile.txt");

//FileReader reader1=new FileReader(file1);

Reader reader2=new FileReader(file1);

char chararray[]=new char[(int)file1.length];

int len=reader2.read(chararray,5,5);

reader2.close;

String info=new String(chararray);

System.out.println(info);

}

}

package com.click369.test4;

import java.io.File;

import java.io.FileReader;

import java.io.Reader;

public class TestMain {

public static void main(String[] args) throws Exception{

//intread读取单个字符。

//返回值作为整数读取的字符,范围在 0 到 65535 之间 (0x00-0xffff),如果已到达流的末尾,则返回 -1

//创建字符输入流

File file1=new File("F:"+File.separator+"20191015"+File.separator+"test"+File.separator+"myfile.txt");

//FileReader reader1=new FileReader(file1);

Reader reader2=new FileReader(file1);

char chararray[]=new char[(int)file1.length];

int temp=0;

int index=0;

while((temp=reader2.read)!=-1){

chararray[index]=(char)temp;

index++;

}

reader2.close;

String info=new String(chararray);

System.out.println(info);

}

责任编辑:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值