原标题:Java中的输入/输出流(1)
为了更好的帮助大家便利的学习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);
//只要创建出输出流对象,那么输出流就会自动去创建这个不存在的文件
}
}
通过输出流对象写出数据:
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);
}
}
通过字节输入流读取数据:
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);
}
}
通过字符输出流写出数据需要【写方法】
来自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;
}
}
字符输入流
在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);
}
责任编辑: