1、File类常用操作
2、获取目录下所有文件和文件夹
3、获取当前目录下所有.java文件
4、从磁盘读取一个文件到内存,然后打印在控制台上
5、写一个“HelloWorld”到文件系统中
6、拷贝一张图片到另外一个目录
7、读取一个文件,统计A和a分别出现了多少次
8、统计一个文件中各个字母出现次数
9、使用随机文件流类RandomAccessFile将一个文本文件倒置读出。
1、File类常用操作
package Demo; import java.io.File; import java.io.IOException; /** * Created by xuming on 2018/4/10. * 1. 在电脑D盘下创建一个文件为HelloWorld.txt文件, * 判断他是文件还是目录,再创建一个目录IOTest, * 之后将HelloWorld.txt移动到IOTest目录下去; * 之后遍历IOTest这个目录下的文件 * * 程序分析: * 1、文件创建使用File的createNewFile()方法 * 2、判断是文件用isFile(),判断是目录用isDirectory * 3、创建目录用:mkdirs()方法 * 4、移动文件用:renameTo * 5、遍历目录用:list()方法获得存放文件的数组,foreach遍历的方法把文件打印出来 */ public class Demo1 { public static void main(String[]args) throws IOException { //创建文件 File file = new File("D:","HelloWorld.txt"); boolean isFile = file.createNewFile(); if(isFile == true){ System.out.println("创建成功"); }else{ System.out.println("已存在"); } //判断是文件还是目录 if(file.isDirectory()){ System.out.println("是目录"); }else if(file.isFile()){ System.out.println("是文件"); } //创建一个目录 File fileDir = new File("D:" + File.separator + "HelloDir"); boolean mkdirBoolean = fileDir.mkdir(); if(mkdirBoolean == true){ System.out.println("创建成功"); }else{ System.out.println("覆盖成功"); } //将文件移动到目录下 boolean renameBoolean = file.renameTo(new File(fileDir.getPath() + File.separator + file.getName())); if(renameBoolean == true){ System.out.println("rename成功"); }else{ System.out.println("覆盖成功"); } } }
2、获取目录下所有文件和文件夹
package Demo; import java.io.File; import java.util.ArrayList; import java.util.List; /** * Created by xuming on 2018/4/10. * 这是一个获取目录下所有文件夹内的所有文件的封装类,当然前提是你要传进来一个正确路径的文件夹 */ public class FileUtils { public static List getAllFiles(String dir){ List<File> files = new ArrayList<File>(); File file = new File(dir); if(file.exists() && file.isDirectory()){ //获取目录下所有文件及文件夹。 readFileAndDir(file , files); } return files; } //递归获取文件和文件夹。 private static void readFileAndDir(File file, List<File> files) { File[] fileArr = file.listFiles(); //file下的所有目录和文件。 if(fileArr ==null){ return; }else{ for(File fileTemp : fileArr){ files.add(fileTemp); if(fileTemp.isDirectory()){ readFileAndDir(fileTemp , files); } } } } public static void main(String [] args){ List<File> files = FileUtils.getAllFiles("D:"); files.forEach(file -> { System.out.println(file.getParent()+" "+file.getName()); }); } }
3、获取当前文件夹下的所有.java文件
package com.vtstar.sct.desktop.clients.FeedingLine21.swingUI.Demo; import java.io.File; import java.util.ArrayList; import java.util.List; /** * Created by xuming on 2018/4/10. * 递归实现列出当前工程下所有.java文件 */ public class Demo3 { public static List getAllFiles(String dir){ List<File> files = new ArrayList<File>(); File file = new File(dir); if(file.exists() && file.isDirectory()){ //获取目录下所有文件及文件夹。 readFileAndDir(file , files); } return files; } //递归获取文件和文件夹。 private static void readFileAndDir(File file, List<File> files) { File[] fileArr = file.listFiles(); //file下的所有目录和文件。 if(fileArr ==null){ return; }else{ for(File fileTemp : fileArr){ files.add(fileTemp); if(fileTemp.isDirectory()){ readFileAndDir(fileTemp , files); } } } } public static void main(String [] args){ List<File> files = getAllFiles("."); //.代表当前目录 for(File file : files){ if(file.getName().endsWith(".java")){ System.out.println(file.getName()); } } } }
4、从磁盘读取一个文件,然后答应到控制台上
package Demo; import java.io.File; import java.io.FileInputStream; import java.io.IOException; /** * Created by xuming on 2018/4/10. * 从磁盘读取一个文件到内存中,再打印到控制台 * *程序设计: * 1、读取文件用到FileinputSteam * 2、把读取的内容不断加入到StringBuffer, * 3、再把StringBuffer打印出来就可以 */ public class Demo4 { public static void main(String [] args){ File file = new File("D:HelloWorld.txt"); if(!file.isFile()){ System.out.println("这不是个文件"); } FileInputStream fileInputStream = null; int len = 0; StringBuilder stringBuilder = new StringBuilder(); byte[] data = new byte[1024]; try { fileInputStream = new FileInputStream(file); while ((len =fileInputStream.read(data)) != -1){ stringBuilder.append(new String(data,0,len)); } fileInputStream.close(); }catch (IOException e) { e.printStackTrace(); } System.out.println(stringBuilder.toString()); } }
5、写一个HelloWorld到文件系统中
package com.vtstar.sct.desktop.clients.FeedingLine21.swingUI.Demo; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; /** *在程序中写一个"HelloJavaWorld你好世界"输出到操作系统文件Hello.txt文件中。 * * 程序分析:文件写入,要用到输出流FileOutputStream */ public class Demo5 { public static void main(String [] args) throws IOException { String date = "HelloJavaWrrld"; File file = new File("D:/hello.txt"); try { // file.createNewFile(); FileOutputStream fileOutputStream = fileOutputStream = new FileOutputStream(file); fileOutputStream.write(date.getBytes()); fileOutputStream.flush(); fileOutputStream.close(); } catch (IOException e) { e.printStackTrace(); } } }
6、拷贝一张图片到另外一个目录
package Demo; import java.io.*; /** * 拷贝一张图片,从一个目录到另外一个目录下(PS:是拷贝是不是移动) * * 程序设计思路: * 这题不能使用renameTo, * 解题步骤: * 1、在目的地址创建一个图片文件 * 2、读取源地址文件的字节流 * 3、把读取到的字节流写入到目的地址的文件里面 * 4、刷新输出流,并关闭就可以了 * */ public class Demo6 { public static void main(String [] args) throws IOException { File fileSource = new File("D:/test.jpg"); File fileTarget = new File("F:/test.jpg"); FileInputStream fileInputStream = null; FileOutputStream fileOutputStream = null; try { fileInputStream = new FileInputStream(fileSource); fileOutputStream = new FileOutputStream(fileTarget); int len = 0; byte[] date = new byte[1024]; while ((len = fileInputStream.read(date)) != -1){ fileOutputStream.write(date,0,len); } fileOutputStream.flush(); } catch (IOException e) { e.printStackTrace(); }finally { fileInputStream.close(); fileOutputStream.close(); } } }
7、读取一个文件,判断A和a各出现了多少次
package Demo; import java.io.*; /** * 统计一个文件calcCharNum.txt(见附件)中字母'A'和'a'出现的总次数 * * 程序分析: * 读取文件用FileInputStream * 一次只读一个字节(一个字母就是一个字节),当字节内容和A或a相等时,相应的数量加1 * */ public class Demo7 { public static void main(String [] args) throws IOException { int aNum = 0; int ANum = 0; File file = new File("D:/test.txt"); FileInputStream fileInputStream = new FileInputStream(file); byte[] date = new byte[1]; while ((fileInputStream.read(date)) != -1){ if(date[0] == 'A'){ ANum ++; }else if(date[0] == 'a'){ aNum ++; } } fileInputStream.close(); System.out.println("A出现的次数:"+ANum+" "+"a出现的次数为:"+aNum); } }
8、统计一个文件中各个字母出现的次数
package Demo; import java.io.*; import java.util.HashMap; import java.util.Map; import java.util.Set; /** * 统计一个文件中各个字母出现次数: * A(8),B(16),C(10)...,a(12),b(10),c(3)....,括号内代表字符出现次数; * */ public class Demo8 { public static void main(String [] args) throws IOException { File file = new File("D:/test.txt"); FileInputStream fileInputStream = new FileInputStream(file); HashMap<Byte,Integer> hashMap = new HashMap<>(); byte[] date = new byte[1]; while((fileInputStream.read(date)) != -1){ byte nowByte = date[0]; if(hashMap.containsKey(nowByte)){ hashMap.put(nowByte,hashMap.get(nowByte)+1); }else{ hashMap.put(nowByte,1); } } fileInputStream.close(); Set<Map.Entry<Byte,Integer>> entrySet = hashMap.entrySet(); entrySet.forEach(entry->{ System.out.println(test15(entry.getKey())+"("+entry.getValue()+")"); }); } /** * Byte97变String * @param a * @return */ public static String test15(byte a) { String returnStr = null; for (byte i = 0; i < 26; i++) { if ((65 + i) == a) { returnStr = (char) (65 + i)+""; } if ((97 + i) == a) { returnStr = (char) (97 + i)+""; } } return returnStr; } }
9、使用随机文件流RandomAccessFile将一个文本倒置读出
package Demo; import java.io.*; /** *使用随机文件流类RandomAccessFile将一个文本文件倒置读出。 * * 程序分析: * RandomAccessFile的seek方法能把读取文件的光标移动到具体的位置 * 但是还是有地点值得注意的是一个字母或数字是占用一个字节的, 一个汉字是占用两个字节的 */ public class Demo9 { public static void main(String [] args) throws IOException { File file = new File("D:/test.txt"); try { RandomAccessFile raf = new RandomAccessFile(file, "r"); long length = raf.length(); //文本有多长 StringBuffer sb = new StringBuffer(); while (length > 0) { length--; raf.seek(length); int c = (char) raf.readByte(); // 如果asc码<=255,>=0,则判断是个英文字符,添加到字符串中。 if (c >= 0 && c <= 255) { sb.append((char) c); } else { // 如果不在asc码范围内,则判断是个汉字字符 // 汉字字符是占2个字节的,所以length再退一个字节 length--; raf.seek(length); byte[] cc = new byte[2]; // cc被复制为文件中连续的两个字节 raf.readFully(cc); sb.append(new String(cc)); } } System.out.println(sb); raf.close(); } catch (Exception e) { e.printStackTrace(); } } }