2024年2月22日发(作者:)
第六章 输入输出流及文件操作
在Java中,应用程序所需要读入的数据和写出的数据是通过I/O操作实现的
为进行数据的输入、输出操作,java中把不同的输入、输出源(键盘,文件等)抽象表述为“流”(stream)
Java中的输入输出流可以分为两大类:输入流和输出流
输入流:只能从中读取字节数据,而不能向其写出数据
输出流:只能向其写入字节数据,而不能从中读取数据
包提供了处理各种类型的流:文件流,字节流,字符流等
java语言提供3种自动生成的标准流。
是标准输出流
是标准输入流
是标准异常流
在使用输入输出流时,我们需要根据数据格式、操作对象、随机访问能力等因素,来决定选择那种流来实现功能
字节流是用来针对ISO的8位字节的读和写。
java字节I/O流的层次。FileInputStream:一次读取一个字节 。PipedInputStream:大批量读取。
字节I/O流
java字节流继承层次
字节输入流
所有的字节输入流,都是InputStream的子类,InputStream类包含的主要方法有:
字节输入流
一般来说,字节输入流的数据通常来自二进制文件,所以FileInputStream通常作为字节输入流的操作类。
例:从文件中读取数据。
import putStream;
public class FileInputStreamTest {
public static void main(String argv[])
{
//构建一个字节流对象,对象要对应文件名
try {
FileInputStream fin=new
FileInputStream("C:/");
//读取文件中含有多少个字节
n(ble());
byte b[]=new byte[50];
//跳过文件中前两个字节
(2);
//把文件中读取的字节放在数组b中
(b);
//将数组中b中的内容输出
}
}
n(new String(b));
();
} catch (Exception e) {
tackTrace();
}
n();
所有的字节输出流,都是OutputStream的子类,OutputStream类包含的主要方法有:
import putStream;
import tFoundException;
import tputStream;
import ption;
/**
* 文件拷贝
* 步骤1:把文件读取到输入流中
* 步骤2:输入流存入byte数组中
*步骤3:建立一个输出流
*步骤4:把数组中的信息一次写入输入流
*/
public class CopeOutputStream {
public static void main(String[] args) throws IOException {
FileInputStream fin;
try {
fin = new FileInputStream("C:/");
byte[] b=new byte[ble()];
(b);
FileOutputStream fon=new FileOutputStream("c:/");
(b);
();
();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
tackTrace();
}
}
}
上例中,把图片的数据一次性读入内存,这是很危险的。
import putStream;
import tputStream;
public class CopyOutputStream {
public static void main(String[] args) throws Exception{
FileInputStream pin=new FileInputStream("c:/");
FileOutputStream op=new FileOutputStream("c:/");
byte[] b=new byte[100]; //数组一次可存入 100字节
if(((b))>0)
{
(b);
}
();
();
}
}
字符I/O流
Reader和Writer是包中字符I/O 流的抽象父类,它们派生的子类如图所示。
import putStream;
import tputStream;
public class TestOutputInput {
/**
* 建立一个文件, 向里面写入1——10000个数字,再利用输入流读取到控制台进行打印
*/
public static void main(String[] args) throws Exception{
FileOutputStream fout=new
FileOutputStream("c:/");
FileInputStream fin=new
FileInputStream("c:/");
for(int i=0;i<=100;i++)
}
}
(i);
();
int value;
while((value=())!=-1)
n(value);
();
一些I/O类的主要功能:
字符输入流
字符输入流都是抽象类Reader的子类。其中包括InputStreamReader及其子类FileReader,BufferedReader等
BufferedReader类是最常使用的字符输入流,它的构造方法有:
edReader(Reader in)
edReader(Reader in, int sz)
BufferedReader类包含的主要方法有:
基于标准输入输出的IO操作
在Java里,提供了“标准输入流”和“标准错误输出流”,分别对应于
字符输入流都是抽象类Writer的子类。其中包括PrintWriter类、OutputStreamWriter及其子类FileWriter,BufferedWriter等。
BufferedWriter类包含的常见方法:
________————————————————————————————————————————————————————————————————————————————————————————————
字符文件的复制。
和。
import edReader;
import edWriter;
import ader;
import iter;
import ption;
public class TestBufferedWriter {
public static void main(String[] args){
BufferedReader br=null;
BufferedWriter bw=null;
try {
br=new BufferedReader(
new FileReader("c:/"));
bw=new BufferedWriter(
new FileWriter("c:/"));
String message=" ";
while((message=ne())!=null)
{
(message);
e();
}
} catch (Exception e) {
// TODO Auto-generated catch block
tackTrace();
}finally
{
try {
();
} catch (IOException e) {
// TODO Auto-generated catch block
tackTrace();
}
try {
();
} catch (IOException e) {
// TODO Auto-generated catch block
tackTrace();
}
}
}
}
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
import edReader;
import treamReader;
public class TestBufferedReader {
/**
* BufferedReader是一个缓冲区读取流,一次可以读取一行
* InputStreamReader比BufferedReader低一个层次,一次可以读入一个字符
* 比InputStreamReader低一个层次,一次可以读入一个字节
* BufferedReader可以封装低层次的流
*/
public static void main(String[] args) throws Exception{
BufferedReader bf=new BufferedReader(new
InputStreamReader());
n("读取并输出字符串");
n(ne());
//读取并输出整型数据
n("输入一个整型");
int i=nt(ne());
n(i);
//读取并输出double类型的数据
n("输入一个double型");
double b=ouble(ne());
n(b);
}
}、
————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
import edReader;
import edWriter;
import ader;
import iter;
public class TestPassword {
/**
* @param args
*/
public static void main(String[] args) throws Exception{
FileReader fr=new FileReader("c:/");
BufferedReader in=new BufferedReader(fr);
FileWriter fw=new FileWriter("c:/");
BufferedWriter out=new BufferedWriter(fw);
int value;
}
}
while((value=())!=-1)
{
n((char)value);
(value);
}
();
();
();
java的文件管理
对于文件或目录的其他操作,如重命名、删除、列表显示等,需要使用Java的文件管理File类。
例:建立File类对象
import ;
public class TestFile {
public static void main(String[] args) throws Exception{
//首先指定文件夹要建在哪个目录下
File currentPath=new File("c:/");
//生成(指定)目录对象
File tempPath=new File(currentPath,"temp");
//生成目录
();
//在temps目录下建立两个文件,
File temp1=new File(tempPath,"");
NewFile();
File temp2=new File(tempPath,"");
NewFile();
//改名为
File temp=new File(tempPath,"");//生成文件对象
To(temp);
//调用listDir()
File f=new File("C:/Program Files");
listDir(f);
}
//做一个方法,把temp目录下的所有文件都显示出来
public static void listDir(File currentPath) throws
Exception{
String[] fileNames=();
for(int i=0;i<;i++)
{
File f=new
File(h(),fileNames[i]);//路径名和文件名。生成每一个目录的文件对象
//如果是目录,显示目录名,递归调用
if(ctory())
{
n(onicalPath());//显示目录完整路径
//递归调用
listDir(f);
}
}
}
}
对文件名操作提供的方法
测试文件属性操作提供的方法
为目录操作提供的方法
为文件信息操作提供的方法
常见文件操作
总结
Java对资源的操作是通过输入输出流完成的,根据数据源的类型可以分成字节流和字符流两种
java的字节流继承于InputStream、OutputStream和RandomAccessFile,字符流继承于Reader和Writer
虽然java提供了很多适用于不同情况的流,我们只需要掌握标准输入输出流(、)、文件流(字节流和字符流)和BufferedReader、BufferedWriter就可以了,其余输入输出流的用法和它们非常相似
发布评论