I/O流
1、使用Files. walkFileTree()找出指定文件夹下所有大于指定大小(比如1M)的文件。
import java.io.File; public class 文件大小 { static long sum=0; public static void main(String[] args) { File c=new File("E:\\2019秋季学期\\java\\05.StreamAndFileSourceCode"); length1(c); System.out.println("文件大小为"+sum); } public static void length1(File c) { File r[]=c.listFiles(); for(int i=0;i<r.length;i++) { if(r[i].isFile()) { sum=sum+r[i].length(); } if(r[i].isDirectory()) { length1(r[i]); } } } }
运行结果
2、使用Files. walkFileTree()找出指定文件夹下所有扩展名为.txt和.java的文件。
源代码
import java.io.IOException; import java.nio.file.FileVisitResult; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.nio.file.SimpleFileVisitor; import java.nio.file.attribute.BasicFileAttributes; import java.util.ArrayList; import java.util.List; /** * 使用的是JDK 1.7,Files.walkFileTree会是一个很好的选择。 * 这个类位于java.nio.file包下,这个包是JDK 1.7中新增的。 * */ public class walkFileTree{ public static void main(String[] args) throws IOException { Path startingDir = Paths.get("E:\\2019秋季学期\\java\\05.StreamAndFileSourceCode"); FilterFilesVisitor filterFilesVisitor= new FilterFilesVisitor(".java"); FilterFilesVisitor filterFilesVisitor1= new FilterFilesVisitor(".txt"); Files.walkFileTree(startingDir, filterFilesVisitor); Files.walkFileTree(startingDir, filterFilesVisitor1); for (String name : filterFilesVisitor.getFilenameList()) { System.out.println(name); } for (String name : filterFilesVisitor1.getFilenameList()) { System.out.println(name); } } } class FilterFilesVisitor extends SimpleFileVisitor<Path> { private List<String> filenameList = new ArrayList<String>(); private String fileSuffix = null; public FilterFilesVisitor(String fileSuffix){ this.fileSuffix = fileSuffix; } public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) { if (file.toString().endsWith(fileSuffix)) { filenameList.add(file.toString()); } return FileVisitResult.CONTINUE; } public List<String> getFilenameList() { return filenameList; } public void setFilenameList(List<String> filenameList) { this.filenameList = filenameList; } }
运行结果
3、使用Files. walkFileTree()找出指定文件夹下所有包容指定字符串的txt文件。
源代码
import java.io.IOException; import java.nio.file.FileVisitResult; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.nio.file.SimpleFileVisitor; import java.nio.file.attribute.BasicFileAttributes; import java.util.ArrayList; import java.util.List; /** * 使用的是JDK 1.7,Files.walkFileTree会是一个很好的选择。 * 这个类位于java.nio.file包下,这个包是JDK 1.7中新增的。 * */ public class walkFileTree{ public static void main(String[] args) throws IOException { Path startingDir = Paths.get("E:\\2019秋季学期\\java\\05.StreamAndFileSourceCode"); FilterFilesVisitor filterFilesVisitor= new FilterFilesVisitor(".java"); // FilterFilesVisitor filterFilesVisitor1= new FilterFilesVisitor(".txt"); Files.walkFileTree(startingDir, filterFilesVisitor); // Files.walkFileTree(startingDir, filterFilesVisitor1); for (String name : filterFilesVisitor.getFilenameList()) { System.out.println(name); } // for (String name : filterFilesVisitor1.getFilenameList()) { // System.out.println(name); // } } } class FilterFilesVisitor extends SimpleFileVisitor<Path> { private List<String> filenameList = new ArrayList<String>(); private String fileSuffix = null; public FilterFilesVisitor(String fileSuffix){ this.fileSuffix = fileSuffix; } public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) { if (file.toString().contains(fileSuffix)) { filenameList.add(file.toString()); } return FileVisitResult.CONTINUE; } public List<String> getFilenameList() { return filenameList; } public void setFilenameList(List<String> filenameList) { this.filenameList = filenameList; } }
运行结果
4、编写一个程序,指定一个文件夹,能自动计算出其总容量;
源代码
import java.io.File; public class 文件大小 { static long sum=0; public static void main(String[] args) { File c=new File("E:\\2019秋季学期\\java\\05.StreamAndFileSourceCode"); length1(c); System.out.println("文件大小为"+sum); } public static void length1(File c) { File r[]=c.listFiles(); for(int i=0;i<r.length;i++) { if(r[i].isFile()) { // if(r[i].length()>(1024*1024)) sum=sum+r[i].length(); // System.out.println(r[i].getName()+"文件大小为"+r[i].length()); } if(r[i].isDirectory()) { length1(r[i]); } } } }
运行结果
5、编写一个文件加解密程序,通过命令行完成加解密工作;
源代码
import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; public class 文件加密 { public static void main(String[] args) { File start=new File("E:\\2019秋季学期\\java\\05.StreamAndFileSourceCode\\start.txt"); File guocheng=new File("E:\\2019秋季学期\\java\\05.StreamAndFileSourceCode\\guocheng.txt"); File end=new File("E:\\2019秋季学期\\java\\05.StreamAndFileSourceCode\\end.txt"); try { jiami(start,guocheng); } catch (IOException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } try { jiemi(guocheng,end); } catch (IOException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } } public static void jiami(File start,File guocheng) throws IOException { if(!start.exists()) { System.out.println("文件不存在"); } if(!guocheng.exists()) { System.out.println("加密文件不存在"); guocheng.createNewFile(); } InputStream c=new FileInputStream(start); OutputStream b=new FileOutputStream(guocheng); int a=0; while((a=c.read())>-1) { b.write(a^98); } c.close(); b.flush(); b.close(); } public static void jiemi(File guocheng,File end) throws IOException { if(!guocheng.exists()) { System.out.println("end is not"); } if(!end.exists()) {System.out.println("end is not"); } InputStream c=new FileInputStream(guocheng); OutputStream b=new FileOutputStream(end); int a=0; while((a=c.read())>-1) { b.write(a^0x98); } c.close(); b.flush(); b.close(); } }
运行结果
6、编写一个文件分割工具,能把一个大文件分割成多个小的文件。并且能再次把它们合并起来得到完整的文件。
源代码
import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileWriter; import java.io.IOException; import java.io.InputStreamReader; public class 文件分割和合并 { public static void main(String[] args) { //声明:!!partitionFile(原大文件,切割后存放的小文件的路径,切割规定的行数) cut("E:\\2019秋季学期\\java\\abc.txt", "E:\\2019秋季学期\\java\\1",3000); } private static void cut(String src, String endsrc, int num) { FileInputStream fis = null; File file = null; int name=1; try { InputStreamReader reader = new InputStreamReader( new FileInputStream(src),"GBK"); BufferedReader br = new BufferedReader(reader);//读取文件内的内容 String str=br.readLine(); file =new File(src); while (str != null) { //分别找到原大文件的文件名和文件类型,为下面的小文件命名做准备 String name2 = file.getName(); int lastIndexOf = name2.lastIndexOf("."); String substring = name2.substring(0, lastIndexOf); String substring2 = name2.substring(lastIndexOf, name2.length()); FileWriter write = new FileWriter(endsrc + "\\\\"+ substring + "-" + name + substring2); BufferedWriter out=new BufferedWriter(write); for(int k=0;k<num;k++) { out.write(str); str=br.readLine(); if(str == null) { break; } } //结束资源 out.close(); name++; } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { try { if (fis != null) { //结束资源 fis.close(); } } catch (IOException e) { e.printStackTrace(); } } } }
运行结果