java的输入输出与文件读写
按照数据的传输方向,流 以是未经加工的原始二进制数据,又可以是经过一定编码处理后符合某种格式规定的
特定数据,即流是由位(bits)组合或者字符(character)构成的序列,如字符流序列、数字流序列。
将数据从外设或外存(如:键盘、鼠标、文件)传递到应用程序的流称为输入流(input stream);将数据从应用程序传递到外存或外设(屏幕、打印机)的流称为输出流(output stream)。即:输入流读取数据(这里指的是应用程序读取数据),输出流写入数据(这里指的是应用程序写入数据)。
流式输入输出的特点:
1、是数据的获取和发送是沿着数据序列顺序进行,每个数据必须等待排在它前面的数据读入或者送出之后才能被读写,每次读写操作处理的都是序列中剩余的未读写数据的第一个,而不能随选择输入输出的位置。
2、采用数据流来处理输入输出使得应用程序的输入输出操作独立于相关设备,每一个应用程序可以用于多个输入输出设备,而不需要对源代码作出任何修改。增强了程序的可移植性。
输入输出流按照处理数据的类型分为:字节流(bate stream)和字符流(character stream)。字节流每次读写8位二进制数,由于它只能讲数据以二进制的方式读写,而不能分解、重组和理解这些数据,所以可以使之变换、恢复到原来的有意义的状态,因此字节流有称为二进制流(binary byte stream)或位流。而字符流一次读写16位二进制数,并将其作为一个字符而不是二进制位来处理。
字节流:处理字节数据(基本类型为InputStream、OutputStream)
字符流:处理字符数据(基本类型为Reader、Writer)
文件类:File,用于对磁盘文件和文件夹的管理。即:File是对文件存储的关注,比如文件最后的修改时间、存储位置等,而流是对文件内容的关注。这是二者的区别。
示例1:在程序中创建一个文本文件file.txt,写入从键盘输入的一串字符,然后再读取该文件并将文本文件的内容显示在屏幕上。
//filename:FileTest.java
import java.io.*;
class FileTest{
public static void main(String[] args){
char ch;
int data;
try{
FileInputStream fis = new FileInputStream(FileDescriptor.in);//声明并创建FileInputStream类型对象,初始化对象为键盘输入
FileOutputStream fos = new FileOutputStream("d:\\myfile.txt");//声明并创建FileOutputStream类型对象,初始化对象
System.out.println("请输入一串字符串,并以 # 结束:");
while((ch=(char)fis.read()) != '#')//强制类型转换为char并判断
fos.write(ch);
fin.close();
fos.close();
FileInputStream fi = new FileInputStream("d:\\myfile.txt");//声明并创建FileInputStream类型对象,初始化对象
FileOutStream fo = new FileOutputStream(FileDescriptor.out);//声明并创建FileOutputStream类型对象,初始化对象
while(fi.avaliable() > 0)
{
data = fi.read();
fo.write(data);
}
fi.close();
fo.close();
}
catch(FileNotFoundException e){
System.out.println("文件没找到");
}
}
}
示例2:用FileInputStream和FileOutputStream实现对二进制图像文件的复制
//filename:ImageFileTest.java
import java.io.*;
public Class ImageFileTest{
public static void main(String[] args) throws IOException{
FileInputStream fi = new FileInputStream("d:\\scenery.jpg);//声明并创建FileInputStream类型的对象,初始化对象
FileOutputStream fo = new FileOutputStream("d:\\copyScenery.jpg");//声明并创建FileOutputStream类型的对象,初始化对象
byte [] b = new byte[fi.available()];//创建byte类型的数组
fi.read(b);//将图形文件读入b数组
fo.write(b);//将b数组的数据写入新文件'copyScenery.jpg'
System.out.println("文件已被复制并更名");
fi.close();
fo.close();
}
}