第八次 java实验 紫金学院 输入输出流

第八次 java实验 紫金学院 输入输出流,第1张

一、实验目的

  1. 熟悉流——输入/输出流的基本概念。
  2. 掌握常用输入/输出流的使用。
  3. 掌握文件与文件字节流 *** 作(重点)。

二、实验原理及说明

  1. 在Java中把不同的数据源和程序间的数据传输(输入和输出或者数据的读和写)

抽象地描述成“流”(Stream),计算机中处理的数据形式为“0”或者“1”这样的二进制位,流也称为数据流;Java中一切均为对象,流也是对象。

  1. 流的 *** 作步骤:

1)实例化流(获得流对象)-->new+相应流的构造方法;

2)包装流-->提高流的处理效率,或者增强流的功能;

3)读写流-->流 *** 作,从输入流中读数据,往输出流中写数据;

4)如果是输出流,清除缓存;

5)关闭流-->节省内存资源,减轻内存的压力。

  1. InputStream类提供的read方法以字节为单位顺序地读取源中的数据。
        1.  int read()
        2.  int read(byte b[ ])//从源中读取b.length个字节到b中,返回实际读取字节数。如果文件到达末尾返回-1
        3.  int read(byte b[ ], int off, int len)//从源中读取len个字节到b中,并返回实际读取的字节数,参数off指定从字节数组的某个位置开始存放读取的数据
  2. OutputStream流以字节为单位顺序地写文件,只要不关闭流,每次调用write方

法就顺序地向目的地写入内容。

  1.  void write(int n) //将指定的字节写入此输出流
  2.  void write(byte b[ ])//将 b.length 个字节从指定的 byte 数组写入此输出流
  3.  void write(byte b[ ],int off,int len)//将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此输出流
  1. Reader类/Writer类是处理所有字符流输入/输出类的父类,具有与InputStream类

  /OutputStream类相似的方法

  1. 如果需要以字节为单位读取/写入文件,就可以使用FileInputStream类

/FileOutputStream类来创建指向该文件的文件字节输入/输出流。

FileInputStream(String name);

FileInputStream(File file);

FileOutputStream(String name);

FileOutputStream(File file);

  1. 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接口一个方法
  1. 使用File类创建一个文件对象
  • File file=new File("c:\myletter","letter.txt");
  • public boolean createNewFile();
  1. 删除当前文件
  • public boolean delete();

三、实验内容

  1. 演示通过字节流实现文件复制功能。

提示:使用FileInputStream类/FileOutputStream类。

  1. 读取一个文本文件,并显示该文本的内容,同时写到另外一个文本文件中。

  提示:使用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");
	}

}

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/872142.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-13
下一篇 2022-05-13

发表评论

登录后才能评论

评论列表(0条)