【实验目的与要求】
1、掌握常用字节输入输出流的用法;
2、掌握常用字符输入输出流的用法;
3、掌握File类的用法。
【实验内容】
\1. 请编写一个程序,使用FileInputStream与FileOutputStream流实现文件的拷贝,具体要求如下:
a) 将当前程序源文件(MyIoExc.java)的内容拷贝到E:\shiyan3路径下的文件名为mycopy.txt的文件中(拷贝文件中所有的内容);拷贝完成,在命令行窗口中提示拷贝成功;
b) 读取mycopy.txt文件,并在命令行窗口中显示文件的全部内容。
提示:1)对于不存在的路径可使用File类型先创建好;2)接收的数组可构造String文件不确定源文件中数据多少时可使用循环读取数据;如何判断文件中是否还有数据(read方法的返回值-1)。
\2. 请基于内容1的程序做修改,使用FileReader与FileWriter流实现文件的拷贝。请理解并熟练掌握基本字节和字符流的区别和用法。
实验代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107
| package javatest3;
import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; 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.nio.charset.Charset;
public class Copy {
public static void main(String[] args) { File fl1 = new File("E:\\课程\\Java\\下学期实验课\\实验三\\javatest3\\src\\javatest3\\Copy.java"); File fl2 = new File("D:\\shiyan3\\mycopy.txt"); File path; if(!(path = new File(fl2.getParent())).exists()){ path.mkdirs(); }else{ if(!fl2.exists()){ try { fl2.createNewFile(); } catch (IOException e) { e.printStackTrace(); } } copy(fl1, fl2); } FileInputStream input; try { input = new FileInputStream(fl2); byte[] buf = new byte[1024]; int bytesRead; while ((bytesRead = input.read(buf)) > 0) { String str = new String(buf, 0, bytesRead); System.out.println(str); } } catch (Exception e) { e.printStackTrace(); }
}
public static void copy(File oldfile, File newfile){ InputStream input = null; OutputStream output = null; try{ input = new FileInputStream(oldfile); output = new FileOutputStream(newfile); byte[] buf = new byte[1024]; int bytesRead; while ((bytesRead = input.read(buf)) > 0) { output.write(buf, 0, bytesRead); } System.out.println("拷贝成功"); input.close(); output.close(); } catch (Exception e) { e.printStackTrace(); }
} }
|
\3. 现有一个文件english.txt,请使用缓冲流(BufferedReader、BufferedWriter)完成本程序,具体要求如下:读取文件中的内容,统计其中每一行单词的个数,并同时将每一行的单词个数及每个单词写到另一个文件中。
例如:“第1行共5个单词,分别为:The,arrow,missed,the,target;”
提示:字符串分割可使用split方法(正则表达式中,空格类字符、英文输入法下符号的元字符为:”\s”、”\p{Punct}”)、StringTokenizer或者Scanner类型实现。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
| package javatest3;
import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException;
public class CountWord {
public static void main(String[] args) { File english = new File("C:\\Users\\cust\\workspace\\javatest3\\src\\english.txt"); File count = new File("D:\\shiyan3\\count.txt"); File path; if(!(path = new File(count.getParent())).exists()){ path.mkdirs(); }else{ if(!count.exists()){ try { count.createNewFile(); } catch (IOException e) { e.printStackTrace(); } } countWords(english, count); } }
public static void countWords(File file, File newfile){ try { FileReader fr = new FileReader(file); BufferedReader br = new BufferedReader(fr); FileWriter fw = new FileWriter(newfile); BufferedWriter bw = new BufferedWriter(fw); String str; int count = 0; int row = 1; while ((str = br.readLine()) != null) { String[] s = str.split("[^a-zA-Z]"); String info = null ; for(int i = 0; i< s.length; i++){ if(s[i] != ""){ count++; } } info="第"+row+"行有"+count+"个单词,分别是:"; for(int i = 0; i< s.length; i++){ if(s[i] != ""){ info += s[i]+" "; } } System.out.println(info); bw.write(info); bw.newLine(); row++; count = 0; } br.close(); fr.close(); bw.close(); fw.close(); } catch (Exception e) { e.printStackTrace(); } } }
|