1. 程式人生 > >java小編程練習筆記

java小編程練習筆記

字符串表 etime jce scanner 斐波那契 cep append 後綴 quit

import java.io.*; import java.math.BigInteger; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.Scanner; /** * @author lw * @createTime 2018/11/14 20:42 * @description 文件操作 */ public class WrongFileTest { // 創建具有指定路徑的文件對象 @Test public void filedome() { File file = new File("ddd.txt"); try { if (!file.exists()) { file.createNewFile(); } } catch (IOException e) { System.out.println("創建失敗"); e.printStackTrace(); } // 創建具有指定路徑的文件對象 // 指定的盤符被占用,不是正常的存儲盤符 File file1 = new File(".\\sds\\jj"); File txtfile = new File(file1, "atxt.txt"); file1.mkdirs(); try { txtfile.createNewFile(); } catch (IOException e) { e.printStackTrace(); } } @Test public void filedome1() { File dirs = new File("."); String[] list = dirs.list(); for (String string : list) { System.out.println(string); } System.out.println("------------------"); File[] files = dirs.listFiles(); for (File file : files) { System.out.println(file); } File file1 = new File("a.txt"); Date d = new Date(file1.lastModified()); //文件的最後修改時間 SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss"); System.out.println(sdf.format(d)); } @Test public void filedome2() throws Exception { // 判斷E盤目錄下是否有後綴名為.jpg的文件,如果有,就輸出該文件名稱 File dirs = new File("d:\\"); //第一種 File[] subfile = dirs.listFiles(); for (File files : subfile) { if (files.isFile() && files.getName().endsWith(".jbj")) { System.out.println(files); } } //第二種 String[] list = dirs.list(); for (String string : list) { if (string.endsWith("*.jpg")) { System.out.println(string); } } //第三種 String[] arr = dirs.list(new FilenameFilter() { //內部類實現 @Override public boolean accept(File dir, String name) { File file = new File(dir, name); return file.isFile() && file.getName().endsWith("*.jpg"); } }); for (String string : arr) { System.out.println(string); } //使用文件名稱過濾器篩選將指定文件夾下的小於200K的小文件獲取並打印 File sudir = new File("c:\\"); String[] filelength = sudir.list(new FilenameFilter() { @Override public boolean accept(File dir, String name) { File fillen = new File(dir, name); return (fillen.length() / 1024 < 200) ? true : false; } }); for (String name : filelength) { System.out.println(name); } } @Test public void filedome3() throws IOException { FileInputStream fis = new FileInputStream("a.txt"); int a; byte[] arr = new byte[4]; while ((a = fis.read(arr)) != -1) { System.out.print(new String(arr, 0, a)); } fis.close(); System.out.println("======================================"); FileReader fr = new FileReader("a.txt"); int c; while ((c = fr.read()) != -1) { System.out.print((char) c); } fr.close(); } /** * @param :args * @throws :IOException close方法 * 具備刷新的功能,在關閉流之前,就會先刷新一次緩沖區,將緩沖區的字節全都刷新到文件上,再關閉,close方法刷完之後就能寫了 * flush方法? * 具備刷新的功能,刷完之後還可以繼續寫 */ @Test public void filedome4() throws Exception { BufferedInputStream bis = new BufferedInputStream(new FileInputStream("a.txt")); BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("se.txt")); byte[] arr = new byte[1024]; int len; while ((len = bis.read()) != -1) { bos.write(arr, 0, len); } bis.close(); bos.close(); } /** * 將鍵盤錄入的數據拷貝到當前項目下的text.txt文件中,鍵盤錄入數據當遇到quit時就退出 * <p> * 分析: * 1,創建鍵盤錄入對象 * 2,創建輸出流對象,關聯text.txt文件 * 3,定義無限循環 * 4,遇到quit退出循環 * 5,如果不quit,就將內容寫出 * 6,關閉流 * * @throws :IOException */ @Test public void filedome5() throws Exception { Scanner scanner = new Scanner(System.in); FileOutputStream fos = new FileOutputStream("atx.txt"); while (true) { String line = scanner.nextLine(); if ("qute".equals(line)) { break; } fos.write(line.getBytes()); fos.write("\t\n".getBytes()); } fos.close(); } @Test public void filedome6() { } @Test public void filedome7() throws Exception { // FileWriter ss = new FileWriter("ss"); // ss.write("您好!!!"); // ss.close(); BufferedReader bufferedReader = new BufferedReader(new FileReader("a.txt")); // BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter("a.txt")); String lin; while ((lin = bufferedReader.readLine()) != null) { System.out.println(lin); } bufferedReader.close(); } //將一個文本文檔上的文本反轉,第一行和倒數第一行交換,第二行和倒數第二行交換 @Test public void filedome8() throws Exception { BufferedReader bufferedReader = new BufferedReader(new FileReader("at.txt")); ArrayList<String> list = new ArrayList<>(); String line; while ((line = bufferedReader.readLine()) != null) { list.add(line); } bufferedReader.close(); BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter("cc.txt")); for (int i = list.size() - 1; i >= 1; i--) { bufferedWriter.write(list.get(i)); bufferedWriter.newLine(); } bufferedWriter.close(); } // 獲取一個文本上每個字符出現的次數,將結果寫在times.txt上 @Test public void filedome9() throws Exception { BufferedReader bufferedReader = new BufferedReader(new FileReader("a.txt")); HashMap<Character, Integer> mp = new HashMap<>(); int c; while ((c = bufferedReader.read()) != -1) { char hc = (char) c; mp.put(hc, !mp.containsKey(hc) ? 1 : mp.get(hc) + 1); } bufferedReader.close(); BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter("cdsd")); for (Character key : mp.keySet()) { bufferedWriter.write(key + "==" + mp.get(key)); } bufferedWriter.close(); } public static int jceng(int num) { if (num == 1) { return 1; } else { return num * jceng(num - 1); } } // 獲取一個文本上每個字符出現的次數,將結果寫在times.txt上 @Test public void filedome10() throws Exception { BufferedReader bf = new BufferedReader(new FileReader("ssss")); HashMap<Character, Integer> map = new HashMap<>(); int c; while ((c = bf.read()) != -1) { char hc = (char) c; if (!map.containsKey(hc)) { map.put(hc, 1); } else { map.put(hc, map.get(hc) + 1); } } bf.close(); BufferedWriter bw = new BufferedWriter(new FileWriter("sw")); for (Character key : map.keySet()) { bw.write(key + "===" + map.get(key)); } bf.close(); } // 從鍵盤接收一個文件夾路徑,統計該文件夾大小/ @Test public void filedome11() throws Exception { // Scanner scanner = new Scanner(System.in); // String arr = scanner.nextLine(); File file = new File("D:\\TOOL\\IDEASpace\\mavedome\\src\\test\\java\\Fu"); if (!file.exists()) { System.out.println("您輸入的不是路徑"); System.exit(0); } int len = 1; File[] files = file.listFiles(); for (File fils : files) { len += fils.length(); } System.out.println(len); } @Test public void filedome12() throws Exception { BufferedReader br = new BufferedReader(new FileReader("ssd")); String line = br.readLine(); int times = Integer.parseInt(line); if (times > 0) { //4,在if判斷中要將--的結果打印,並將結果通過輸出流寫到文件上 System.out.println("您還有" + times-- + "次機會"); FileWriter fileWriter = new FileWriter("con,txt"); fileWriter.write(times + " "); fileWriter.close(); } else { System.out.println("您的試用次數已到,請購買正版"); } br.close(); } /** * 需求:1,從鍵盤接收一個文件夾路徑,統計該文件夾大小 * <p> * 從鍵盤接收一個文件夾路徑 * 1,創建鍵盤錄入對象 * 2,定義一個無限循環 * 3,將鍵盤錄入的結果存儲並封裝成File對象 * 4,對File對象判斷 * 5,將文件夾路徑對象返回 * <p> * 統計該文件夾大小 * 1,定義一個求和變量 * 2,獲取該文件夾下所有的文件和文件夾listFiles(); * 3,遍歷數組 * 4,判斷是文件就計算大小並累加 * 5,判斷是文件夾,遞歸調用 */ @Test public void filedome13() { File file = new File("D:\\TOOL\\IDEASpace\\mavedome\\src\\test"); System.out.println(getDirlenth(file)); } /** * 統計該文件夾大小 * 1,返回值類型long * 2,參數列表File dir */ public static Long getDirlenth(File dir) { long length = 0; File[] files = dir.listFiles(); for (File subfiles : files) { if (subfiles.isFile()) { length += subfiles.length(); } else { length += getDirlenth(subfiles); } } return length; } /** * 刪除該文件夾 * 1,返回值類型 void * 2,參數列表File dir */ public static void deleteFile(File dir) { File[] subfil = dir.listFiles(); for (File fils : subfil) { if (fils.isFile()) { fils.delete(); } else { deleteFile(fils); } } dir.delete(); } /** * 從鍵盤接收一個文件夾路徑 * 1,返回值類型File * 2,參數列表無 */ public static File getDir() { Scanner scanner = new Scanner(System.in); System.out.println("請輸入文件路徑"); while (true) { String dir = scanner.nextLine(); File file = new File(dir); if (!file.exists()) { System.out.println("您錄入的文件夾路徑不存在,請輸入一個文件夾路徑"); } else if (file.isFile()) { System.out.println("您錄入的是文件路徑,請輸入一個文件夾路徑"); } else { return file; } } } /** * 需求:3,從鍵盤接收兩個文件夾路徑,把其中一個文件夾中 * (包含內容)拷貝到另一個文件夾中 * <p> * 把其中一個文件夾中(包含內容)拷貝到另一個文件夾中 * 分析: * 1,在目標文件夾中創建原文件夾 * 2,獲取原文件夾中所有的文件和文件夾,存儲在File數組中 * 3,遍歷數組 * 4,如果是文件就用io流讀寫 * 5,如果是文件夾就遞歸調用 * * @throws: IOException */ @Test public void filedome14() throws Exception { File str = getDir(); File dest = getDir(); if (str.equals(dest)) { System.out.println("路徑一致"); } else { copy(str, dest); } } /* * 把其中一個文件夾中(包含內容)拷貝到另一個文件夾中 * 1,返回值類型void * 2,參數列表File src,File dest */ public static void copy(File src, File dest) throws Exception { File newdir = new File(dest, src.getName()); File[] subfiles = newdir.listFiles(); for (File subfil : subfiles) { if (subfil.isFile()) { BufferedInputStream bufferedInputStream = new BufferedInputStream(new FileInputStream(subfil)); BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(new FileOutputStream(new File(newdir, subfil.getName()))); int len; while ((len = bufferedInputStream.read()) != -1) { bufferedOutputStream.write(len); } bufferedInputStream.close(); bufferedOutputStream.close(); } else { copy(subfil, newdir); } } } @Test public void filedome15() { // File file = new File("C:\\Users\\lw\\Desktop\\課件\\day23_code\\講師代碼"); // printLev(file,0); String rootFolderPath = "C:\\Users\\lw\\Desktop\\課件\\day23_code\\講師代碼"; showTree(0, new File(rootFolderPath)); } public static void printLev(File dir, int lev) { //1,把文件夾中的所有文件以及文件夾的名字按層級打印 File[] files = dir.listFiles(); for (File file : files) { for (int i = 0; i <= lev; i++) { System.out.print("\t"); } //3,無論是文件還是文件夾,都需要直接打印 System.out.println(file.getName()); if (file.isDirectory()) { printLev(file, ++lev); } } } public static void showTree(int level, File parentFolderPath) { if (parentFolderPath.isDirectory()) { File[] childFiles = parentFolderPath.listFiles(); for (File file : childFiles) { showNameByLevel(level); System.out.println(file.getName()); if (file.isDirectory()) { showTree(level + 1, file); } } } } public static void showNameByLevel(int level) { StringBuffer spaceStr = new StringBuffer(); if (level > 0) { for (int i = 0; i < level; i++) { spaceStr.append(" "); } } if (spaceStr.length() > 0) System.out.print("|" + spaceStr); System.out.println("|"); if (spaceStr.length() > 0) System.out.print("|" + spaceStr); System.out.print("----"); } /** * * 不死神兔 * 故事得從西元1202年說起,話說有一位意大利青年,名叫斐波那契。 * 在他的一部著作中提出了一個有趣的問題:假設一對剛出生的小兔一個月後就能長成大兔,再過一個月就能生下一對小兔,並且此後每個月都生一對小兔,一年內沒有發生死亡, * 問:一對剛出生的兔子,一年內繁殖成多少對兔子? * 1 1 2 3 5 8 13 21 * 1 = fun(1) * 1 = fun(2) * 2 = fun(1) + fun(2) * 3 = fun(2) + fun(3) */ @Test public void filedome16() { System.out.println(fun(8)); } /* * 用遞歸求斐波那契數列 */ public static int fun(int num) { if (num == 1 || num == 2) { return 1; } else { return fun(num - 2) + fun(num - 1); } } /** * @Author:lw * @Description: 需求:求出1000的階乘所有零和尾部零的個數,不用遞歸做 * @Date:12:18 2018/11/15 */ @Test public void filedome17() { //求1000的階乘中所有的零 BigInteger bi1 = new BigInteger("1"); for (int i = 1; i <= 1000; i++) { BigInteger bi2 = new BigInteger(i + ""); bi1 = bi1.multiply(bi2); //將bi1與bi2相乘的結果賦值給bi1 } String str = bi1.toString();//獲取字符串表現形式 int count = 0; for (int i = 0; i < str.length(); i++) { if (‘0‘ == str.charAt(i)) { //如果字符串中出現了0字符 count++; } } System.out.println(count); } @Test public void filedome18() { //獲取1000的階乘尾部有多少個零 BigInteger bi1 = new BigInteger("1"); for (int i = 1; i <= 1000; i++) { BigInteger bi2 = new BigInteger(i + ""); bi1 = bi1.multiply(bi2); } String str = bi1.toString(); StringBuffer stringBuffer = new StringBuffer(str); str = stringBuffer.reverse().toString(); //鏈式編程 int count = 0; for (int i = 0; i < str.length(); i++) { if (‘0‘ != str.charAt(i)) { break; } else { count++; } } System.out.println(count); } /** * @param :args 需求:求出1000的階乘尾部零的個數,用遞歸做 * 5 10 15 20 25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100...1000 1000 / 5 = 200 * 5 * 5 5 * 5 * 2 5 * 5 * 3 5 * 5 * 4 5 * 5 * 5 5 * 5 * 6 200 / 5 = 40 * 5 * 5 * 5 * 1 5 * 5 * 5 * 2 5 * 5 * 5 * 3 5 * 5 * 5 * 4 5 * 5 * 5 * 5 5 * 5 * 5 * 6 5 * 5 * 5 * 7 5 * 5 * 5 * 8 * 40 / 5 = 8 * 5 * 5 * 5 * 5 8 / 5 = 1 */ @Test public void filedome19() { System.out.println(fun1(1000)); } // 需求:求出1000的階乘尾部零的個數,用遞歸做 public static int fun1(int num) { if (num > 0 && num < 5) { return 0; } else { return num / 5 + fun1(num / 5); } } /** * 獲取幸運數字 * 1,返回值類型int * 2,參數列表int num */ @Test public void filedome20() { System.out.println(getLucklyNum(384)); } /** * 獲取幸運數字 * 1,返回值類型int * 2,參數列表int num */ public static int getLucklyNum(int num) { ArrayList<Integer> list = new ArrayList<>(); for (int i = 1; i <= num; i++) { list.add(i); } int ncout = 1; //用來數數的,只要是3的倍數 for (int i = 0; list.size() != 1; i++) { //只要集合中人數超過1 if (i == list.size()) { //如果i增長到集合最大的索引+1時 i = 0; //重新歸零 } if (ncout % 3 == 0) { list.remove(i--); } ncout++; } return list.get(0); }

java小編程練習筆記