输入输出流-Java

一、实验目的及要求

(1)实验目的:掌握File类,熟悉字节流和字符流的常用方法,掌握文件字节流和文件字符流,进行文件读写操作。

(2)实验要求:利用文件字节流和文件字符流的构造方法创建对象,通过read和write方法对数据进行读取和写入,对实验中出现的问题进行分析,确定调试步骤和测试方法,直至文件读写操作成功。 

二、实验环境(工具、配置等)

1.硬件要求:计算机一台。

2.软件要求:Windows操作系统,使用Java语言,集成开发环境建议使用如Eclipse

三、实验内容(实验方案、实验步骤、设计思路等)

1.实验方案:编写应用程序,创建文件对象,分别完成2部分内容:通过文件字节输入流和输出流,完成文件内容的读取和写入操作;通过文件字符输入流和输出流,完成文件内容的写入和读取操作,完成实验报告。

2.实验步骤:

1)设计程序需要用到的类,分析类的构成。

2)创建主类Demo1类

3)在主类中实现文件字节输入和输出流,完成文件内容的读取和写入操作

4)在主类中实现文件字符输入和输出流,完成文件内容的读取和写入操作

5)运行程序,检验输出结果的正确性。

3.设计思路:

先创建指定输入流的源文件对象file,然后通过exists()函数判断文件是否存在,不存在创建这个文件,然后创建指向目的地的字节输出流FileOutputSteam fo,创建写入内容的字节数组,通过write()函数将字节内容写入file,关闭输出流,再创建指向源的字节输入流FileInputStream fi,创建缓存字节数组bt1[],将文件信息通过read()函数读入缓存数组中,然后将字节转为字符串输出,关闭输入流;创建新的文件对象file1,确保这个新的文件名不存在,重命名file的名字变为file1的名字,创建字符输出流FileWriter fw,将字符串word的内容通过write()函数写入文件file1中,关闭输出流,创建字符输入流FileReader fr,创建缓存数组ch[],将文件中的字符通过read()函数读入缓存数组中,将字符转为字符串输出,关闭输入流。

 

四、实验结果与分析

1.测试程序是否能够正确运行出正确结果,第一次运行结果和D盘文件显示如图4-1图4-2所示

输入输出流-Java_第1张图片

图4-1 屏幕输出结果

输入输出流-Java_第2张图片

图4-2 D盘文件显示

2.测试程序是否能够正确运行出正确结果,第二次运行结果和D盘文件显示如图4-3图4-4所示

输入输出流-Java_第3张图片 图4-3屏幕输出结果

输入输出流-Java_第4张图片

 

图4-4 D盘文件显示

实验分析:

1.实验遇到的问题:

1)在重命名file的时候,往下写文件字符输入流和输出流的源和目的地的时候不确定到底是file还是file1,但是我想在后面输出的时候文件名字变为“mr”而不是“cwn”。

2.问题解决的方法:

1)确定文件字符输入流和输出流的源和目的地的是file1,因为当第一次运行的时候“mr”这个名字不存在,“cwn”被重命名为“mr”,这个时候如果是file1的话,读取和写入的文件的名字就会是“mr”,后面输出的时候就是“mr”,这样最后运行完D盘中只有一个文件就是“mr”,它其实是一开始的file,不过因为名字的问题后面变成了file1;第二次运行的时候第一次运行的“mr”仍然存在,所以这个时候重命名失败,D盘会有两个文件“cwn”和“mr”。

五、附源程序

package shiyanbaogao_five;
import java.io.*;

public class Demo1 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		File file=new File("D:\\cwn.txt");//指定输入流的源
		if(!file.exists())//如果这个文件不存在
		{
			try {
				file.createNewFile();//创建这个文件
				System.out.println("Creating a file successfully!");
			} catch (Exception e) {
				// TODO: handle exception
				e.printStackTrace();
			}
		}
		//------------文件字节输入和输出流---------------
		
		try {
			FileOutputStream fo=new FileOutputStream(file);//创建指向目的地的输出流
			byte bt[]="Long steps of blood. That's the way he'll take you home.".getBytes();//写入内容的字节数组
			fo.write(bt);//将bt[]字节的内容写入file 向目的地写数据
			fo.close();//关闭流
		} catch (IOException e) {
			// TODO: handle exception
			e.printStackTrace();
		}
		try {
			FileInputStream fi=new FileInputStream(file);//创建指向源的输入流
			byte bt1[]=new byte[1024];//缓存字节数组
			int length=fi.read(bt1);//将文件信息读入缓存数组中
			System.out.println("文件名:"+file.getName()+"文件内容"+new String(bt1,0,length));//将字节转为字符串输出
			fi.close();//关闭流
			} catch (IOException e) {
			// TODO: handle exception
				e.printStackTrace();
		}
		//---------文件字符输入和输出流----------------
		File file1=new File("D:\\mr.txt");//新的文件
		if(file1.exists())//确保新的文件名不存在
		{
			try {
				System.out.println("文件名mr已存在");
			} catch (Exception e) {
				// TODO: handle exception
				System.out.println("文件名mr未存在");
			}
		}
		if(file.renameTo(file1))//重命名file的名字变为file1的名字
		{
			System.out.println("文件已重命名");
		}
		else {
			System.out.println("文件重命名失败");
		}
		try {
			FileWriter fw=new FileWriter(file1);//创建字符输出流
			String word="Bitter long hate flower.That is he suffered for you.";
			fw.write(word);//将字符串的内容写入文件中
			fw.close();//关闭流
		} catch (IOException e) {
			// TODO: handle exception
			e.printStackTrace();
		}
		try {
			FileReader fr=new FileReader(file1);//创建字符输入流
			char ch[]=new char[1024];//缓存字符数组
			int length1=fr.read(ch);//将文件中的字符读入缓存数组中
			System.out.println("文件名:"+file1.getName()+"文件内容:"+new String(ch,0,length1));//将字符转为字符串输出
			fr.close();//关闭流
		} catch (IOException e) {
			// TODO: handle exception
			e.printStackTrace();
		}
	}

}

你可能感兴趣的:(Java简单应用,java,eclipse)