实验五 输入输出练习

xiaoxiao2021-02-28  18

1、使用Scanner类解析文件。

(1)准备文件test.txt内容,内含字符、数字等文本信息;

(2)使用Scanner类读取里面的字符信息和数字信息分别输出。

import java.io.*; import java.util.*; public class Main { public static void main(String[] args) throws FileNotFoundException { File file = new File("d:\\test.txt");// 创建目录 Scanner sc = new Scanner(file); StringBuffer buff1 = new StringBuffer(); StringBuffer buff2 = new StringBuffer(); String str; while (sc.hasNext()) { str = sc.nextLine(); for (int i = 0; i < str.length(); i++) { if (!(str.charAt(i) >= '0' && str.charAt(i) <= '9')) { buff1.append(str.charAt(i)); } } for (int i = 0; i < str.length(); i++) { if (str.charAt(i) >= '0' && str.charAt(i) <= '9') { buff2.append(str.charAt(i)); } } } System.out.println("文件内的字符信息有:" + buff1); System.out.println("文件内的数字信息有:" + buff2); sc.close(); } }

输出: 下课就不错卡三六九等aaadjadhsdaks 啥速度从 113221111


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

根据要求编写程序:

(1)创建类Student,内含学号、姓名、年龄、班级等属性,重写父类的toString()方法,用于输出学生的信息;

(2)建立测试类,建立Student类的对象数组stuArray,里面放置若干个学生对象,将数组中的数据依次写入文件stu.dat;然后读取该文件中的信息,依次还原出数组中各Student对象的信息。

package pp; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.Serializable; import java.util.*; class Sdutent implements Serializable{ String id; String name; int age; String banji; public Sdutent(String id, String name, int age, String banji) { super(); this.id = id; this.name = name; this.age = age; this.banji = banji; } public String toString() { return "Student [id=" + id + ", name=" + name + ", age=" + age + ", banji=" + banji + "]"; } } public class Main { public static void main(String[] args) throws FileNotFoundException, IOException, ClassNotFoundException{ Sdutent stu1 = new Sdutent("0001", "aaa", 20, "00001"); Sdutent stu2 = new Sdutent("0002", "bbb", 20, "00001"); Sdutent[] stuArray = new Sdutent[] {stu1, stu2};//创建学生对象数组 ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("stu.dat"));//输出流写进stu.dat文件里 ObjectInputStream ois = new ObjectInputStream(new FileInputStream("stu.dat"));//输入流从stu.dat文件中读出 oos.writeObject(stuArray); Object object = ois.readObject(); if(object instanceof Sdutent[]) { Sdutent[] stus = (Sdutent[])object; for(Sdutent stu:stus) { System.out.println(stu); } } oos.close(); ois.close(); } }

输出: Student [id=0001, name=aaa, age=20, banji=00001] Student [id=0002, name=bbb, age=20, banji=00001]


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

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

package pp; import java.io.*; import javax.swing.JFileChooser; public class Main { public static void main(String[] args) throws IOException { StringBuffer buffer = new StringBuffer(); BufferedReader br; BufferedWriter bw; JFileChooser ch = new JFileChooser(); //打开文件 int result = ch.showOpenDialog(null); //读文件 if(result == JFileChooser.APPROVE_OPTION) {//确定键 File file = ch.getSelectedFile(); br = new BufferedReader(new FileReader(file));//读取文件 String line; while((line = br.readLine()) != null) { line = line.toUpperCase();//全部大写字母 buffer.append(line); } System.out.println(buffer);//显示出来 br.close(); } //将buffer内存的数据写出去 //保存文件 result = ch.showSaveDialog(null); if(result == JFileChooser.APPROVE_OPTION) { File file = ch.getSelectedFile(); bw = new BufferedWriter(new FileWriter(file)); bw.write(buffer.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();

package pp; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.MalformedURLException; import java.net.URL; import java.util.Arrays; public class Main { public static void main(String[] args) throws IOException { URL url = new URL("http://www.sdut.edu.cn"); InputStream is = url.openStream();//输入流,读取 OutputStream os = new FileOutputStream("d:\\sdut.html");//输出流,写入这个文件中 byte[] bytes = new byte[10];//一个读取10个字符,但是写入不是 int len; while((len = is.read(bytes)) != -1) { // System.out.println(Arrays.toString(bytes)); os.write(bytes, 0, len); } } }

输出:在d盘下有一个sdut.html文件


5、利用各种输入输出流进行读写文件,分析其读写效率。

读出文件D:\test1.txt的内容,显示在屏幕的同时,将文件写至D:\test2.txt中,计算其执行的时间,从而分析执行的效率。

提示,可用如下的输入/输入流类:

字节输入/输出流:FileInputStream和FileOutputStream、BufferedInputStream和BufferedOutputStream、DataInputStream和DataOutputStream;

字符输入/输出流:FileReader和FileWriter、BufferedReader 和 BufferedWriter

import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.Reader; import java.io.Writer; public class Main { public static void main(String[] args) throws IOException { // 字符输入输出流 // FileReader和FileWriter Reader ir = new FileReader("d:\test1.txt"); Writer wr = new FileWriter("d:\test2.txt"); long l1 = System.currentTimeMillis(); char[] chars = new char[10]; 缓冲区 int len; while ((len = ir.read(chars)) != -1) { wr.write(chars, 0, len); /*String str = new String(chars, 0, len); 将字符转化成字符串输出即可 System.out.println(str);*/ } ir.close(); wr.close(); long l2 = System.currentTimeMillis(); System.out.println(l2 - l1); // BufferedReader 和 BufferedWriter InputStream is = new FileInputStream("c:\\abc.txt"); OutputStream os = new FileOutputStream("d:\\abc.txt"); BufferedInputStream bis = new BufferedInputStream(is); BufferedOutputStream bos = new BufferedOutputStream(os); long l3 = System.currentTimeMillis(); byte[] bytes = new byte[10]; int len1 = 0; while((len1 = bis.read(bytes))!=-1) { bos.write(bytes, 0, len); System.out.println(new String(bytes, 0, len1)); } bis.close(); bos.close(); is.close(); os.close(); long l4 = System.currentTimeMillis(); System.out.println(l4-l3); } } import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.Reader; import java.io.Writer; public class Main { public static void main(String[] args) throws IOException { // 字节输入输出流 // FileInputStream和FileOutputStream FileInputStream fis = new FileInputStream("d:\test1.txt"); FileOutputStream fos = new FileOutputStream("d:\test2.txt"); long l1 = System.currentTimeMillis(); long l2 = System.currentTimeMillis(); System.out.println(l2 - l1); // InputStream is = new FileInputStream("c:\\abc.txt"); OutputStream os = new FileOutputStream("d:\\abc.txt"); BufferedInputStream bis = new BufferedInputStream(is); BufferedOutputStream bos = new BufferedOutputStream(os); long l3 = System.currentTimeMillis(); byte[] bytes = new byte[10]; int len1 = 0; while((len1 = bis.read(bytes))!=-1) { bos.write(bytes, 0, len); System.out.println(new String(bytes, 0, len1)); } bis.close(); bos.close(); is.close(); os.close(); long l4 = System.currentTimeMillis(); System.out.println(l4-l3); } }

6、利用DataInputStream和DataOutputStream读写文件。

将数字1-100、字母A-Z、a—z写出至文件D:\abc.txt中,然后读取出来,显示在屏幕上。

package pp; import java.io.*; public class Main { public static void main(String[] args) throws IOException { FileOutputStream output = new FileOutputStream("D:\\abc.txt"); DataOutputStream dO= new DataOutputStream(output); FileInputStream input = new FileInputStream("D:\\abc.txt"); DataInputStream dI = new DataInputStream(input); //写进文件 for(int i = 1; i <= 100; i++) { dO.writeInt(i); } for(int i = 65; i <= 90; i++) {//A-Z dO.writeChar(i); } for(int i = 97; i <= 122; i++) {//a-z dO.writeChar(i); } dO.close(); //读取输入流显示在屏幕上 for(int i = 1; i < 100; i++) { System.out.print(dI.readInt()+" "); } System.out.println(dI.readInt()); for(int i = 65; i < 90; i++) { System.out.print(dI.readChar()); } System.out.println(dI.readChar()); for(int i = 97; i < 122; i++) { System.out.print(dI.readChar()); } System.out.println(dI.readChar()); dI.close(); } }

7、利用File类进行文件及文件夹名称的显示。

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

import java.io.File; import java.io.FilenameFilter; import java.util.*; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); File file = new File("d:/test"); if(file.isFile()) {//列出指定目录(d:/test)下的所有文件和目录名 System.out.println("file" + " " + file); } else { listFile(file); } // 列举某文件夹下的以“.txt"结尾的文件名称 File file1 = new File("c:\\test");//test目录下 String [] listfilenames = file1.list(new FilenameFilter() { public boolean accept(File dir, String name) { if(name.endsWith(".txt")){ return true; } else return false; } }); for(String filename:listfilenames) { System.out.println(filename); } sc.close(); } //递归列举某路径下的文件名称 public static void listFile(File file){//形参可能是文件或者路径 if(file!=null){ File[] listFiles = file.listFiles();//文件对象数组 if(listFiles!=null){ for(File filetmp:listFiles){ if(filetmp.isDirectory()){//是目录 System.out.println("direction" + " " + filetmp); listFile(filetmp); } else{//文件 System.out.println(filetmp); } } } } } }

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

package pp; import java.io.*; public class Main { public static void main(String[] args) throws IOException { File file = new File("d:\\java\\ch10\\src"); if(!file.exists()) { file.mkdirs();//直接创建多层目录 } else { file.delete(); } } }

9、使用File类列出某一个目录下创建日期晚于2017-08-10的文件。(目录未进入)

package pp; import java.io.*; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Scanner; public class Main { public static void main(String[] args) throws IOException { Scanner sc = new Scanner(System.in); String s = sc.nextLine();//输入目录 File file = new File(s); File[] list = file.listFiles();//此目录下的所有文件 String day = "2017-08-10 00:00:00"; for(int i = 0; i < list.length; i++) { long st = list[i].lastModified();//文件最后修改的时间 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//需要转换后的时间格式 String sd = sdf.format(new Date(Long.parseLong(String.valueOf(st)))); if(sd.compareTo(day) > 0) {//时间晚于 System.out.println(list[i] +" " + sd);//文件名+时间 } } sc.close(); } }
转载请注明原文地址: https://www.6miu.com/read-1600114.html

最新回复(0)