Java学习之IO流三

Posted Vanguard

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java学习之IO流三相关的知识,希望对你有一定的参考价值。

1.从键盘接收两个文件夹路径,把其中一个文件夹中(包含内容)拷贝到另一个文件夹中(高效流)

 1 /**
 2  * 1.从键盘接收两个文件夹路径,把其中一个文件夹中(包含内容)拷贝到另一个文件夹中
 3  * @author vanguard
 4  *
 5  */
 6 public class Demo01 {
 7     public static void main(String[] args) {
 8         //键盘输入两个文件夹路径
 9         Scanner sc = new Scanner(System.in);
10         System.out.println("请输入源目录:");
11         String srcPath = sc.next();
12         System.out.println("请输入目标目录:");
13         String destPath = sc.next();
14         File src = new File(srcPath);
15         File dest = new File(destPath);
16         try {
17             copyDir(src, dest);
18         } catch (FileNotFoundException e) {
19             System.out.println("源文件不存在");
20             e.printStackTrace();
21         } catch (IOException e) {
22             System.out.println("读取文件失败");
23             e.printStackTrace();
24         }
25         
26     }
27     /**
28      * 复制文件夹
29      * @param src
30      * @param dest
31      * @throws IOException
32      */
33     private static void copyDir(File src, File dest) throws IOException {
34         //遍历源文件夹
35         for(File file : src.listFiles()) {
36             //如果是文件夹,调用复制文件夹细节方法
37             if(file.isDirectory()) {
38                 copyDirDetail(file, dest);
39             } else {
40                 //否则,调用复制文件夹方法
41                 copyFile(file, new File(dest, file.getName()));
42             }
43         }
44     }
45     /**
46      * 复制文件夹细节
47      * @param src
48      * @param dest
49      * @throws IOException
50      */
51     private static void copyDirDetail(File src, File dest) throws IOException {
52             dest = new File(dest, src.getName());
53             //目标文件夹下创建文件夹
54             dest.mkdirs();
55             //遍历文件夹下文件及文件夹
56             for(File file : src.listFiles()) {
57                 if(file.isDirectory()) {
58                     copyDirDetail(file, dest);
59                 } else {
60                     copyFile(file, new File(dest, file.getName()));
61                 }
62             }
63     }
64     
65     /**
66      * 复制文件
67      * @param src
68      * @param dest
69      * @throws IOException
70      */
71     private static void copyFile(File src, File dest) throws IOException {
72         //定义字节输入流缓冲流对象
73         BufferedInputStream bis = new BufferedInputStream(new FileInputStream(src));
74         //定义字节输出流缓冲流对象
75         BufferedOutputStream bos  = new BufferedOutputStream(new FileOutputStream(dest));
76         //定义直接缓冲数组
77         byte[] buf = new byte[1024];
78         //定义读取长度
79         int len = 0;
80         while(-1 != (len = bis.read(buf))) {
81             bos.write(buf, 0, len);
82         }
83         bos.flush();
84         
85         //释放资源
86         bos.close();
87         bis.close();
88     }
89 }

2.获取指定目录及子目录下所有txt文件的个数,并将这些txt文件复制到D盘下任意目录(高效流)

 1 /**
 2  * 2.获取指定目录及子目录下所有txt文件的个数,并将这些txt文件复制到D盘下任意目录
 3  * @author vanguard
 4  *
 5  */
 6 public class Demo02 {
 7     public static void main(String[] args) {
 8         File src = new File("d:\\TortoiseSVN");
 9         File dest = new File("d:\\txt");
10         //定义文件个数
11         int count = 0;
12         try {
13             count = fileNum(src, dest, count);
14         } catch (IOException e) {
15             
16             e.printStackTrace();
17         }
18         System.out.println("txt文件的个数为:" + count);
19     }
20     
21     /**
22      * 统计指定目录及子目录下所有txt文件的个数
23      * @param src
24      * @throws IOException 
25      */
26     private static int fileNum(File src, File dest, int count) throws IOException {
27         //遍历目录下的文件及目录
28         for(File f : src.listFiles()) {
29             if(f.isDirectory()) {
30                 count = fileNum(f, dest, count);
31             } else {
32                 //如果是文件,且以.txt结尾,文件个数加1,调用复制文件方法
33                 if(f.getName().endsWith(".txt")) {
34                     count++;
35                     copyFile(f, new File(dest, f.getName()));
36                 }
37             }
38         }
39         return count;
40     }
41 
42     /**
43      * 复制文件
44      * @param src
45      * @param dest
46      * @throws IOException
47      */
48     private static void copyFile(File src, File dest) throws IOException {
49         //定义字节输入流缓冲流对象
50         BufferedInputStream bis = new BufferedInputStream(new FileInputStream(src));
51         //定义字节输出流缓冲流对象
52         BufferedOutputStream bos  = new BufferedOutputStream(new FileOutputStream(dest));
53         //定义直接缓冲数组
54         byte[] buf = new byte[1024];
55         //定义读取长度
56         int len = 0;
57         while(-1 != (len = bis.read(buf))) {
58             bos.write(buf, 0, len);
59         }
60         bos.flush();
61         
62         //释放资源
63         bos.close();
64         bis.close();
65     }
66 }

3.  用代码实现以下需求

(1)有如下字符串"If you want to change your fate I think you must come to the dark horse to learn java"(用空格间隔)
(2)打印格式:
to=3
think=1
you=2
//........
(3)按照上面的打印格式将内容写入到D:\\count.txt文件中(要求用高效流)

 

 1 /**
 2  * 2. 用代码实现以下需求
 3     (1)有如下字符串"If you want to change your fate I think you must come to the dark horse to learn java"(用空格间隔)
 4     (2)打印格式:
 5         to=3
 6         think=1
 7         you=2
 8         //........
 9     (3)按照上面的打印格式将内容写入到D:\\count.txt文件中(要求用高效流)
10  * @author vanguard
11  *
12  */
13 public class Demo04 {
14     public static void main(String[] args) throws IOException {
15         String str = "If you want to change your fate I think you must come to the dark horse to learn java";
16         //将字符串分割成字符串数组
17         String[] arrays = str.split(" ");
18         //定义存放单词和个数的Map集合,单词为键,个数为值
19         Map<String, Integer> letters = new HashMap<String, Integer>();
20         //遍历Map集合,统计单词的个数
21         for(String arr : arrays) {
22             if(!letters.containsKey(arr)) {
23                 letters.put(arr, 1);
24             } else {
25                 letters.put(arr, letters.get(arr) + 1);
26             }
27         }
28         //遍历Map集合打印输出
29         for(String letter : letters.keySet()) {
30             System.out.println(letter + "=" + letters.get(letter));
31         }
32         //定义字符缓冲输出流
33         BufferedWriter bw = new BufferedWriter(new FileWriter("count.txt"));
34         //遍历Map集合,写数据
35         for(String letter : letters.keySet()) {
36             bw.write(letter + "=" + letters.get(letter));
37             bw.newLine();
38             bw.flush();
39         }
40         //释放资源
41         bw.close();
42     }
43 }

 

4.java写一个程序,实现从文件中读出文件内容,并将其打印在屏幕当中,并标注上行号

 1 /**
 2  * 4.java写一个程序,实现从文件中读出文件内容,并将其打印在屏幕当中,并标注上行号
 3  * @author vanguard
 4  *
 5  */
 6 public class Demo05 {
 7     public static void main(String[] args) throws IOException {
 8         //定义计算行号的变量
 9         int lineNumber = 0;
10         //定义字符缓冲输入流
11         BufferedReader br = new BufferedReader(new FileReader("count.txt"));
12         //定义读取一行内容的字符串
13         String line = null;
14         //读取一行,读取null时,跳出循环
15         while(null != (line = br.readLine())) {
16             //行号加1
17             lineNumber++;
18             //控制台输出行号和读取的字符串
19             System.out.println(lineNumber + "  " + line);
20         }
21         br.close();
22     }
23 }

 







以上是关于Java学习之IO流三的主要内容,如果未能解决你的问题,请参考以下文章

Java学习之IO流(转换流)

Java学习之IO流

Java学习之IO流(序列流--SequenceInputStream)

java学习之字符流与字节流的转换

Java学习之IO流(操作对象)

JAVA学习之字节流字符流