网络书屋(Web Reading Room)

A blogging framework for hackers.

Java班 1月24日

第一题:合并图片

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
/**
* @author 叶昭良
*
*/
import java.io.*;
public class TestCopyTwoFilesToOne implements AutoCloseable
{

        /**
         * @param args
         */
        public static void main(String[] args)
        {
                // TODO 自动生成的方法存根
                File inputFileApple = new File("e://a.jpg");
                File inputFileBanana = new File("e://b.jpg");
                File inputFileOrange = new File("e://c.jpg");
                String temp = null;
                try
                (
                        //字节流
                        InputStream  fisApple= new FileInputStream(inputFileApple);
                        InputStream  fisBanana= new FileInputStream(inputFileBanana);
                        OutputStream  fosOrange= new FileOutputStream(inputFileOrange);
                        // 缓冲流(已通过字符流转换)
                        BufferedReader brApple =  new BufferedReader(new InputStreamReader(fisApple));
                        BufferedReader brBanana =  new BufferedReader(new InputStreamReader(fisBanana));
                        BufferedWriter brOrange =  new BufferedWriter(new OutputStreamWriter(fosOrange));
                )
                {
                        while((temp = brApple.readLine()) != null)
                        {
                                brOrange.write(temp); // 写入第一个文件
                                brOrange.newLine();
                        }
                        while((temp = brBanana.readLine()) != null)
                        {
                                brOrange.write(temp);//写入第二个文件信息
                                brOrange.newLine();
                        }
                }catch(IOException e)
                {
                        System.out.println("文件读取或者写入错误");
                }
        }

        @Override
        public void close() throws Exception
        {
                // TODO 自动生成的方法存根

        }

}

第一题合并图片第二种方法

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
/**
* @author 叶昭良
*
*/
import java.io.*;

import org.apache.commons.io.FileUtils;
public class TestCopyTwoFilesToOne2
{

        /**
         * @param args
         */
        public static void main(String[] args)
        {
                // TODO 自动生成的方法存根
                try
                {
                        // FileUtils暂时无法实现追加!
                        //FileUtils.copyFile(new File("e:/a.jpg"), new File("e://c.jpg"));
                        //FileUtils.copyFile(new File("e:/b.jpg"), new File("e://c.jpg"), true);
                        // 对于大文件可能有问题
                        //利用FileUtils的readFileToString方法读取a.jpg文件的数据,并保存在content中
                        String content = FileUtils.readFileToString(new File("e:/a.jpg"));

                        // 利用FileUtils的writeStringToFIle方法,借用content中间变量写入a.jpg文件信息到c.jpg
                        // 也可以利用FileUtils的copyFile方法,直接复制到c.jpg.
                        FileUtils.writeStringToFile(new File("e://c.jpg"), content);
                        // //利用FileUtils的readFileToString方法读取b.jpg文件的数据,并保存在content中
                        content = FileUtils.readFileToString(new File("e:/b.jpg"));
                        FileUtils.writeStringToFile(new File("e://c.jpg"), content,true);
                } catch (IOException e)
                {
                        // TODO 自动生成的 catch 块
                        System.out.println("写入文件错误!");
                }
        }

}

第二题:把文件夹下所有的txt 文件变为doc文件

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
import java.io.File;

/**
* @author 叶昭良
*
*/
public class RenameDirectoryFiles
{

        /**
         * @param args
         */
        public static void main(String[] args)
        {
                // TODO 自动生成的方法存根
                String roots = "e:";         //盘符
                String Testfile ="TestFile"; //文件夹
                String targetDir = roots+File.separator+Testfile;
                reNameUnderDirectory(new File(targetDir),".java",".txt"); //调用自定义方法
        }

        public static void reNameUnderDirectory(File dir,String from, String to)
        {
                if(null == dir)
                {
                        return; //为空则直接退出
                }
                if(dir.isDirectory())                // 通过路径读入,给定一个路径
                {
                       //抵用File的listFiles方法获取文件夹下的所有File对象
                        File[] fileArray = dir.listFiles();
                        String banana = null;
                        if(null == fileArray)          // 判断是否为空
                        {
                                System.out.println("文件夹内文件为空  找个别的文件夹吧!");
                                return;
                        }
                        for(int i = 0 ; i< fileArray.length; i++)  // 遍历所有文件
                        {
                                if(fileArray[i].isFile())             // 判断是否是文件
                                {
                                        banana = fileArray[i].getName(); //获取文件对象的文件名
                                        if(banana.endsWith(from))        // 只是对以java文件结尾的进行修改
                                        {
                                                String newFilename= fileArray[i].getParent()+File.separator
                                                        +banana.replaceAll(from+"[        DISCUZ_CODE_1        ]quot;;, to); //只替换最后一个from表征的字符串
                                                fileArray[i].renameTo(new File(newFilename)); // 利用renameTo方法 修改文件夹的名字
                                        }
                                }else
                                {
                                        reNameUnderDirectory(fileArray[i],from,to); //递归调用该方法 实现遍历文件夹
                                }
                        }
                }else
                {
                        System.out.println("不是文件夹");
                }
        }
}

第三题:后缀修改(Directory walker):

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
/**
* @author 叶昭良
*
*/
import java.io.*;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;

import org.apache.commons.io.DirectoryWalker;
public class TestCommonIODirectoryWalkRename extends DirectoryWalker
{

        /**
         * @param args
         */
        public TestCommonIODirectoryWalkRename()
        {
                     super();
    }
        public List reName(File startDirectory)
        {
                List results = new ArrayList();
                try
                {
                        walk(startDirectory,results        );
                } catch (IOException e)
                {
                        // TODO 自动生成的 catch 块
                        e.printStackTrace();
                }
                return results;
        }

        protected boolean handleDirectory(File directory,int depth,Collection results)
        {
                //save.svn directories and then skip 不会删除.svn文件夹下的任何信息
                if("fasf".equals(directory.getName())) // 如果你想要保存某个文件夹
                                                        //就添加elseif即可!!当然文件架构还在
                {
                        directory.delete();
                        return false;
                }else
                {
                        return true;
                }
        }

        protected void handleFile(File file,int depth, Collection results)
        {
                String banana = file.getName();
                String newFilename= file.getParent()+File.separator+banana.replaceAll(".txt"+"$", ".doc");
                file.renameTo(new File(newFilename));
                results.add(file);
        }
        // 使用Directory Walker来遍历一个目录并进行相应操作步骤如下
        // 1:创建一个继承DirectoryWalker的类,并在构造函数调用super()
        // 2:定义一个业务入口方法,比如clean,这个方法调用walk方法
        // 3:重写handleDiretory方法  提供相应的业务逻辑
        // 4:重写handleFile方法,提供相应处理逻辑

        // 其中最为关键的是walk方法,该方法制定入口路径,
        // 并提供一个用于接受处理结构的参数。
        // 在walk方法的内部:针对目录对象调用handleDirectory
        //                       文件对象调用handleFile
        public static void main(String[] args)
        {
                // TODO 自动生成的方法存根
                TestCommonIODirectoryWalkRename dw = new TestCommonIODirectoryWalkRename() ;
                List l1 = dw.reName(new File("e://codes"));
                Iterator it = l1.iterator();
                while(it.hasNext())
                {
                        System.out.println(it.next());
                }
        }

}

第四题:读取文本文件,并统计数字字符的个数查阅了ASCII表信息:

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
/**
* @author 叶昭良
*
*/
import java.io.*;
public class getDigtiNumberCount
{

        /**
         * @param args
         */
        public static void main(String[] args)
        {
                // TODO 自动生成的方法存根
                // TODO 自动生成的方法存根

                String  temp = null;
                String roots = "e:";
                String filename = "student.txt";
                String filenameWithPathname=roots+File.separator+filename;
                int len = 0;
                try  // try_with_resources方法,不需要关闭需要closed的资源。
                (
                        BufferedReader br = new BufferedReader(new FileReader(filenameWithPathname));
                )
                {
                        int  i = 0;
                        int count = 0;
                        while((temp = br.readLine()) != null)
                        {
                                System.out.println("打印一行");
                                System.out.println(temp);
                                for(int  j = 0 ;  j  < temp.length(); j++)
                                {//进行数字字符的区间范围判断 
                                        if(temp.charAt(j) >= 48 && temp.charAt(j) <= 57)
                                        {
                                                count++;
                                        }
                                }
                                i++;
                        }
                        System.out.println(filenameWithPathname+"文件总

共有:"+count+"个数字");
                }catch(IOException e)
                {
                        System.out.println("文件打开失败";
                }
        }

}

![ASCII码表数字字符的数值][/images/java/ASCII表.gif]

第四题: 读取文本文件的信息,输入某个人的名字,并输出对应某个人的成绩 文本文件:(保存为 student.txt) 张三 80 李四 90 王五 95 赵四 80 李丹江 64

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
/**
* @author 叶昭良
*
*/
import java.io.*;
import java.util.*;
public class GetMessageofNameFromFile
{

        /**
         * @param args
         */
        public static void main(String[] args)
        {
                // TODO 自动生成的方法存根
                String  temp = null;
                int len = 0;
                try
                (
                        BufferedReader br = new BufferedReader(new FileReader("e:/student.txt"));
                )
                {
                        while((temp = br.readLine()) != null)
                        {
                                len++;
                        }
                }catch(IOException e)
                {
                        System.out.println("读取文件失败");
                }
                String[] names = new String[len];
                //String[] banana = null;
                double[] chengji = new double[len] ;
                try
                (
                        BufferedReader br = new BufferedReader(new FileReader("e:/student.txt"));
                )
                {
                        int  i = 0;
                        while((temp = br.readLine()) != null)
                        {
                                //System.out.println(temp);
                                String[] banana = temp.split(" ");
                                //System.out.println(banana[0]+":"+banana[1]);
                                // 读取文件的name信息
                                names[i] = banana[0];
                                //chengji[i]  = Double.parseDouble(banana[1].trim());
                                //读取文件的成绩信息
                                chengji[i]  = Double.parseDouble(banana[1]);
                                i++;
                        }
                }catch(IOException e)
                {
                        System.out.println("读取文件失败");
                }

                Scanner  sc = new Scanner(System.in);

                while(true)
                {
                        System.out.println("请输入你要查询的名字");
                        String name = sc.nextLine();
                        //如果不输入姓名,直接回车则显示全部姓名!
                        if(name.isEmpty())
                        {
                                System.out.println("输入为空显示全部");
                                for(int i = 0; i < names.length ; i++)
                                {
                                        System.out.println(names[i]+"的成绩是:"+chengji[i]);
                                }
                        }else
                        {
                                for(int i = 0; i < names.length ; i++)
                                {
                                        if(name.equalsIgnoreCase(names[i])) //不区分大小写
                                        {
                                                System.out.println(name+"的成绩是:"+chengji[i]);
                                        }
                                }
                        }
                }

        }

}