signed

QiShunwang

“诚信为本、客户至上”

实验五 输入输出练习_Java

2021/6/24 20:06:46   来源:

实验目的:

(1)掌握文件类File、字节输入流及其子类、字节输出流及其子类、字符输入流及其子类、字符输出流及其子类对象的创建,利用方法读取文件资源、网络资源。
(2)掌握对象流、序列化、Scanner类等相关类使用。
(3)掌握带缓冲区的输入、输出流类及其使用。
(4)掌握输入、输出重定向。

实验内容

1、使用Scanner类解析文件。

(1)准备文件test.txt内容,内含字符、数字等文本信息;
(2)使用Scanner类读取里面的字符信息和数字信息分别输出。

test.txt编码方式为 Win10 默认方式ANSI(GBK),不然汉字无法显示

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class File	 {

	public static void main(String[] args) throws FileNotFoundException {
		
		File file = new File("D:/SDUT/Java/test.txt");
		Scanner reader = new Scanner(file);
		//抛出异常
		String str = null;
		StringBuffer number = new StringBuffer();
		StringBuffer message = new StringBuffer();
		
		while(reader.hasNext()) {
			str = reader.nextLine();
			for(int i=0;i<str.length();i++) {
				if(str.charAt(i)>='0' && str.charAt(i)<='9')
					number.append(str.charAt(i));
				else
					message.append(str.charAt(i));
			}
		}
		reader.close();
		
		System.out.println(str);
		System.out.println("字符信息:"+message.toString());
		System.out.println("数字信息:"+number.toString());
	}

}

示例:
在这里插入图片描述

2、利用对象输入/输出流进行文件的读写。

根据要求编写程序:
(1)创建类Student,内含学号、姓名、年龄、班级等属性,重写父类的toString()方法,用于输出学生的信息;
(2)建立测试类,建立Student类的对象数组stuArray,里面放置若干个学生对象,将数组中的数据依次写入文件stu.dat;然后读取该文件中的信息,依次还原出数组中各Student对象的信息。

import java.io.*;
import java.util.Scanner;

class Student implements Serializable{
	/*
	 * 学号
	 * 姓名
	 * 年龄
	 * 班级
	 */
	private static final long serialVersionUID = 1L;
	int age;
	String id,name,Class;
	
	public Student(String id, String name, int age, String Class) {
		super();
		this.age = age;
		this.id = id;
		this.name = name;
		this.Class = Class;
	}

	@Override
	public String toString() {
		// TODO Auto-generated method stub
		return "学号:"+id+"\n"+"姓名:"+name+"\n"+"年龄:"+age+"\n"+"班级:"+Class+"\n";
	}
	
}

public class File {

	public static void main(String[] args) throws IOException, ClassNotFoundException {
		
		Student stu1 = new Student("001","张三",20,"软件1901");
		Student stu2 = new Student("002","李四",21,"软件1901");
		Student stu3 = new Student("003","王五",22,"软件1901");
		Student[] stuArray = {stu1, stu2, stu3};
		
		ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("stu.dat"));
		ObjectInputStream ois = new ObjectInputStream(new FileInputStream("stu.dat"));
		
		oos.writeObject(stuArray);
		Object object = ois.readObject();
		
		if(object instanceof Student[]) {
			Student [] stus = (Student[]) object;
			
			for(int i=0;i<3;i++)
				System.out.println(stus[i]);
		}
		
		oos.close();
		ois.close();
	}
}

示例:

在这里插入图片描述

3、用打开文本对话框选取文件,读写文件内容。

用打开文本对话框选取文件,读取文件内容,在显示器中显示出来,进行小写字母转换成大写字母,然后用保存文本对话框选取目标文件,向目标文件里面追加写入处理后的字符。

import java.io.*;
import javax.swing.JFileChooser;

public class Main {

	public static void main(String[] args) throws IOException {
		
		StringBuffer sbf = new StringBuffer();
		JFileChooser chooser = new JFileChooser();
		
		if(chooser.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) {
			File file = chooser.getSelectedFile();
			BufferedReader br = new BufferedReader(new FileReader(file));
			String line;
			while ((line = br.readLine()) != null) {
				line = line.toUpperCase();
				sbf.append(line);
			}
			System.out.println(sbf);
			br.close();
		}
		
		if(chooser.showSaveDialog(null) == JFileChooser.APPROVE_OPTION) {
			File file = chooser.getSelectedFile();
			BufferedWriter bw = new BufferedWriter(new FileWriter(file));
			bw.write(sbf.toString());
			bw.flush();
			bw.close();
		}
	}
}

4、读取网络资源,写出代码至文件。
读取"http://www.sdut.edu.cn"网页内容,存至"sdut.html"。
提示语句:
URL url=new URL(“http://www.sdut.edu.cn”);
InputStream is = url.openStream();
public class Exp74{

}



5、利用各种输入输出流进行读写文件,分析其读写效率。
读出文件D:\test1.txt的内容,显示在屏幕的同时,将文件写至D:\test2.txt中,计算其执行的时间,从而分析执行的效率。
提示,可用如下的输入/输入流类:
字节输入/输出流:FileInputStream和FileOutputStream、BufferedInputStream和BufferedOutputStream、DataInputStream和DataOutputStream;
字符输入/输出流:FileReader和FileWriter、BufferedReader 和 BufferedWriter
public class Exp75{

}

6、利用DataInputStream和DataOutputStream读写文件。
将数字1-100、字母A-Z、a—z写出至文件D:\abc.txt中,然后读取出来,显示在屏幕上。
public class Exp76{

}

7、利用File类进行文件及文件夹名称的显示。
编写应用程序,列出指定目录(d:/test)下的所有文件和目录名,然后将该目录下的所有文件后缀名为.txt的文件过滤出来显示在屏幕上。

public class Exp77{

}

8、使用File类创建一个多层目录d:\java\ch10\src。
public class Exp78{

}

9、使用File类列出某一个目录下创建日期晚于2017-08-10的文件。
public class Exp79{

}

10、利用File类编程完成如下任务:
(1)列出一个目录下的所有文件和目录名称;
(2)列出一个目录及子目录下的所有文件名称;
(3)列举一个目录下的所有.java文件名称;
(4)列举一个目录及其子目录下的所有.java文件名称。

public class Exp710{

}