一、实验目的
- 熟悉流——输入/输出流的基本概念。
- 掌握常用输入/输出流的使用。
- 掌握文件与文件字节流 *** 作(重点)。
二、实验原理及说明
- 在Java中把不同的数据源和程序间的数据传输(输入和输出或者数据的读和写)
抽象地描述成“流”(Stream),计算机中处理的数据形式为“0”或者“1”这样的二进制位,流也称为数据流;Java中一切均为对象,流也是对象。
- 流的 *** 作步骤:
1)实例化流(获得流对象)-->new+相应流的构造方法;
2)包装流-->提高流的处理效率,或者增强流的功能;
3)读写流-->流 *** 作,从输入流中读数据,往输出流中写数据;
4)如果是输出流,清除缓存;
5)关闭流-->节省内存资源,减轻内存的压力。
- InputStream类提供的read方法以字节为单位顺序地读取源中的数据。
-
-
- int read()
- int read(byte b[ ])//从源中读取b.length个字节到b中,返回实际读取字节数。如果文件到达末尾返回-1
- int read(byte b[ ], int off, int len)//从源中读取len个字节到b中,并返回实际读取的字节数,参数off指定从字节数组的某个位置开始存放读取的数据
-
-
- OutputStream流以字节为单位顺序地写文件,只要不关闭流,每次调用write方
法就顺序地向目的地写入内容。
- void write(int n) //将指定的字节写入此输出流
- void write(byte b[ ])//将 b.length 个字节从指定的 byte 数组写入此输出流
- void write(byte b[ ],int off,int len)//将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此输出流
- Reader类/Writer类是处理所有字符流输入/输出类的父类,具有与InputStream类
/OutputStream类相似的方法
- 如果需要以字节为单位读取/写入文件,就可以使用FileInputStream类
/FileOutputStream类来创建指向该文件的文件字节输入/输出流。
FileInputStream(String name);
FileInputStream(File file);
FileOutputStream(String name);
FileOutputStream(File file);
- File类的使用:
1)一个File类的对象,表示了磁盘上的文件或目录;一般情况下,File只表示文件,但在Java中它不仅表示文件而且还表示目录;
2)File类提供了与平台无关的方法来对磁盘上的文件或目录进行 *** 作。
- File(String filename); //File对象的构造方法
- File(String directoryPath,String filename); //File对象的构造方法
- File(File f, String filename); //File对象的构造方法
- public boolean mkdir() ; //创建目录
- public String[ ] list(); //用字符串形式返回目录下的全部文件
- public File [ ] listFiles(); //用File对象形式返回目录下的全部文件
- public String[ ] list(FilenameFilter obj) ; //该方法用字符串形式返回目录下的
指定类型的所有文件
- public File [ ] listFiles(FilenameFilter obj) ; //该方法用File对象形式返回目录
下的指定类型所有文件
- public boolean accept(File dir, String name); //FilenameFilter接口一个方法
- 使用File类创建一个文件对象
- File file=new File("c:\myletter","letter.txt");
- public boolean createNewFile();
- 删除当前文件
- public boolean delete();
三、实验内容
- 演示通过字节流实现文件复制功能。
提示:使用FileInputStream类/FileOutputStream类。
- 读取一个文本文件,并显示该文本的内容,同时写到另外一个文本文件中。
提示:使用File类进行文件或目录的 *** 作。
仅限借鉴:
FileOperator
package test08;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.InputStream;
import java.io.PrintWriter;
public class FileOperator {
/**新建目录
* */
public void newFolder(String folderPath){
try {
String filePath=folderPath;
filePath=filePath.toString();
File myFilePath=new File(filePath);//将给定路径名字符串转换为抽象路径名,创建一个新的File实例
if(!myFilePath.exists()){//判断抽象路径名表示的文件或目录是否存在
myFilePath.mkdir();//mkdir创建抽象路径名指定的目录
}
} catch (Exception e) {
System.out.println("新建目录 *** 作出错");
e.printStackTrace();
}
System.out.println("新建目录 *** 作成功");
}
/**新建文件
* */
public void newFile(String filePathAndName,String fileContent){
try {
String filePath=filePathAndName;
filePath=filePath.toString();
File myFilePath=new File(filePath);//将给定路径名字符串转换为抽象路径名,创建一个新的File实例
if(!myFilePath.exists()){//判断抽象路径名表示的文件或目录是否存在
myFilePath.createNewFile();//createNewFile当具有次抽象路径名指定名称的文件不存在时,创建一个新的空文件
}
FileWriter resultFile=new FileWriter(myFilePath);
PrintWriter myFile =new PrintWriter(resultFile);
String strContent=fileContent;
myFile.println(strContent);
resultFile.close();//关闭指针
} catch (Exception e) {
System.out.println("新建文件 *** 作出错");
e.printStackTrace();
}
}
/**删除文件
* */
public void delFile(String filePathAndName){
try {
String filePath=filePathAndName;
filePath=filePath.toString();
File mydelFile=new File(filePath);//将给定路径名字符串转换为抽象路径名,创建一个新的File实例
mydelFile.delete();
} catch (Exception e) {
System.out.println("删除文件 *** 作出错");
e.printStackTrace();
}
System.out.println("删除文件 *** 作成功");
}
/**删除文件夹
* */
public void delFolder(String folderPath){
try {
delAllFile(folderPath);
String filePath=folderPath;
filePath=filePath.toString();
File myFilePath=new File(filePath);//将给定路径名字符串转换为抽象路径名,创建一个新的File实例
myFilePath.delete();
} catch (Exception e) {
System.out.println("删除文件夹 *** 作出错");
e.printStackTrace();
}
}
/**删除文件夹里面所有文件
* */
public void delAllFile(String path){
File file=new File(path);
if(!file.exists()){
return;
}
String[] tempList=file.list();
File temp=null;
for(int i=0;i
FileOperatorTest
package test08;
public class FileOperatorTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
FileOperator fileOperator=new FileOperator();
//新建文件夹
fileOperator.newFolder("D:\zl");
//新建zl.txt文件,写入内容mzl
fileOperator.newFile("D:\zl\zl.txt", "zl");
//新建zl.txt文件,写入内容zl666
fileOperator.newFile("D:\zl\zl1.txt", "zl11");
// //读文件夹
// System.out.println("=============");
// fileOperator.readFile("D:\zl");
//复制文件zl.txt给zl22.txt
System.out.println("=============");
fileOperator.copyFile("D:\zl\zl.txt", "D:\zl\zl22.txt");
//复制D:\zl\zl1文件夹的全部文件给D:\zl---文件的内容会一同复制过来
System.out.println("=============");
fileOperator.copyFolder("D:\zl\zlwj", "D:\zl");
//删除文件
System.out.println("=============");
fileOperator.delFile("D:\zl\copyFileTest.txt");
}
}
代码运行:
ByteCharacterConversionStream
package test08;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.Reader;
public class ByteCharacterConversionStream {
/**
* 写文件
* author:zl*/
public void writeFile(String filePathAndName,String fileContent){
try {
String filePath=filePathAndName;
FileOutputStream fos=new FileOutputStream(filePath);
OutputStreamWriter osw=new OutputStreamWriter(fos);//创建字符流--需要把字节流转成字符流
BufferedWriter zl=new BufferedWriter(osw);//创建字符缓冲输入输出流
if(fileContent!=null){//确定要写入文件的内容不为空
zl.write(fileContent);
zl.newLine();
}
zl.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
}catch (IOException e) {
e.printStackTrace();
}
}
/**
* 读文件*/
public void readFile(String filePathAndName){
try {
//System.out.println(filePathAndName);
FileInputStream fis=new FileInputStream(filePathAndName);
Reader reader=new InputStreamReader(fis);//创建字符流--需要把字节流转成字符流
BufferedReader br=new BufferedReader(reader);//创建字符缓冲输入输出流
String str;
while((str=br.readLine())!=null){
System.out.println(str);
}
br.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
}catch (IOException e) {
e.printStackTrace();
}
}
/**
* 复制文件*/
public void copyFile(String oldFilePath,String newFilePath){
try {
FileInputStream fis=new FileInputStream(oldFilePath);
InputStreamReader isr=new InputStreamReader(fis);
BufferedReader br=new BufferedReader(isr);
FileOutputStream fos=new FileOutputStream(newFilePath);
OutputStreamWriter osw=new OutputStreamWriter(fos);
BufferedWriter zl=new BufferedWriter(osw);
String str;
while((str=br.readLine())!=null){
zl.write(str);
zl.newLine();
}
br.close();
zl.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
}catch (IOException e) {
e.printStackTrace();
}
}
}
ByteCharacterConversionStreamTest
package test08;
public class ByteCharacterConversionStreamTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
ByteCharacterConversionStream file=new ByteCharacterConversionStream();
//写文件
file.writeFile("D:\zl\zlhk.txt", "zl");//当文件不存在时会自动创建新文件
//读文件
System.out.println("文件的内容是:");
file.readFile("D:\zl\zlhk.txt");
//复制文件
file.copyFile("D:\zl\zlhk.txt", "D:\zl\zlhk2222.txt");
System.out.println("新文件的内容是:");
file.readFile("D:\zl\zlhk2222.txt");
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)