讀取文件

工做內容
題目1:
1)查找一個目錄下,全部文件中數字、字母(大小寫不區分)、漢字、空格的個數、行數。
2)將結果數據寫入到文件中。
文件格式以下:
數字:198213個
字母:18231個
漢字:1238123個
空格:823145個
行數:99812行
數字0:123個
數字1:1214個
數字2:23423個
……
字母A:754456個
字母B:7567個
字母C:456456個
使用方法
運用了i/o流的讀和寫,正則表達式,封裝:
思想:一開始我用了char型,就是以字符爲單位的讀,可是這個思想有許多的dug好比說不能判斷行數,換行認爲空格,
後來用了以行爲單位的讀,這個方法讀多少行就有多少行數
while ( (str11 =br.readLine()) != null) {// 判斷是不是最後一行
char[] c = str11.toCharArray();//把字符轉換爲char數組
沒有實現的功能
1 不知道如何用正則表示漢字,
2 想用封裝來完成各個的個數沒有完成,。
3 寫出如何獲取行數。
體會:
發現本身還差的很遠:
1. 字符之間的轉換,
2. i/o流的許多細節還不夠熟練,
3. 正則表達式今天能夠說是第一次用,也是現學現用。
4.正則和字符串之間的運用 Pattern.compile("[a-zA-Z]").matcher(str1).matches()
5.讀取的時候出現中文亂碼
java

6.封裝的時候封裝不了大功能,能夠封裝裏面的小功能。
正則表達式

沒有實現的功能還的看書學習。
實例:數組

 /**
     * 讀取文件
     *
     * @param str
     */
    public String readFile(String str) {
        int s = 0;
        int k = 0;
        int t = 0;
        int d = 0;
        int h = 0;
        String str2 = "";
        File f = new File(str);

        try {
            FileInputStream fis = new FileInputStream(f);
            InputStreamReader isr = new InputStreamReader(fis,"gbk");
            BufferedReader br = new BufferedReader(isr);
            try {
                String str11;
                while ( (str11 =br.readLine()) != null) {// 判斷是不是最後一行
                    char[] c = str11.toCharArray();//把字符轉換爲char數組
                    for (int i = 0; i < c.length; i++) {

                        String str1 = String.valueOf(c[i]);
// char轉換string

                        if (Pattern.compile("[a-zA-Z]").matcher(str1).matches()) {
                            s++;
                        }
// 字母的個數
                        if (Pattern.compile("[0-9]").matcher(str1).matches()) {
                            k++;
                        }
// 數字的個數
                        if (Pattern.compile("[[^\\x00-\\xff]]").matcher(str1).matches()) {
                            t++;
                        }
// 漢字的個數
                        if (Pattern.compile("[\\s]").matcher(str1).matches()) {
                            d++;
                        }
// 空格的個數
// if (Pattern.compile("[\\t]").matcher(str1).matches())
// {
// h++;
                    }// }
                    h++; // 回車的個數

                }
                str2 = "字母:" + s + "個\t\n" + "數字:" + k + "個\t\n" + "漢字:" + t
                        + "個\t\n" + "空格:" + d + "個\t\n" + "回車:" + h + "個\t\n";
                System.out.println(str2);

            } catch (IOException e) {

                System.out.println("讀取失敗!!!");
            } finally {
                try {
                    if(br!=null){
                        br.close();
                    }
                    if(isr!=null){
                        isr.close();
                    }
                    if(fis!=null){
                        fis.close();
                    }
                } catch (IOException e) {

                    System.out.println("關閉不成功!!");
                }
            }
        } catch (FileNotFoundException e) {

            System.out.println("輸入失敗!!!");
        }
        return str2;
    }

    /**
     * 寫出
     *
     * **/
    public void writeFile(String str, String paths) {


        try {
            File file = new File(paths);
            FileOutputStream fop = new FileOutputStream(file);
            if (!file.exists()) {
                file.createNewFile();
            }
            byte[] contentInBytes = str.getBytes();
            fop.write(contentInBytes);
            fop.flush();
            fop.close();
        } catch (IOException e) {
            e.printStackTrace();
            System.out.println("寫入失敗!!!");
        }
    }
    /**
     * 讀寫結合
     *
     */
    public class Combine {

        public void combineFile(String readPaths, String writePaths) {

            Read r = new Read();

            String str1 = r.readFile(readPaths);

            Write w = new Write();

            w.writeFile(str1, writePaths);

        }
    }
    public class Test {
        public static void main(String[] args) {
            Combine c = new Combine();
            String writePaths="E:\\key1.txt";
            String readPaths="E:\\key.txt";
            c.combineFile(readPaths, writePaths);

        }
    }
    /**
     * 字符與正則匹配 str 字符 zhz 正則
     * @return
     */


    public boolean readNumber(String zhz, String str) {

        return Pattern.compile(zhz).matcher(str).matches();

    }
相關文章
相關標籤/搜索