Guava---文件操作Files

    xiaoxiao2023-10-12  156

    1、复制文件

    //通过guava 实现文件复制 private static String from = "D:\\自定义代码\\Guava\\guava\\src\\1.txt"; private static String to = "D:\\自定义代码\\Guava\\guava\\src\\2.txt"; Files.copy(new File(from),new File(to)); //通过java NIO实现文件复制 java.nio.file.Files.copy(Paths.get(from), Paths.get(to), StandardCopyOption.REPLACE_EXISTING);

    2、移动文件

    //to若存在,将被删除,重新生成 Files.move(new File(from),new File(to));

    3、按行读取文件

    //读取文件第一行 String configJson = Files.readFirstLine(file, Charsets.UTF_8); //将文件每一行读到list里 List<String> readLines = Files.readLines(file, Charsets.UTF_8); //按照条件,将文件每行读到list里 Files.readLines(file, Charsets.UTF_8, new LineProcessor<List<String>>() { List<String> list = new ArrayList<>(); @Override public List<String> getResult() { return list; } @Override public boolean processLine(String arg0) throws IOException { // TODO Auto-generated method stub return false; } });

    4、计算文件hashcode (可对比两个文件是否一样)

    //Hashing.md5();Hashing.sha256() HashCode hash = Files.asByteSource(new File(to)).hash(Hashing.sha512());

    5、遍历目录

    String path = "D:\\自定义代码\\Guava\\guava\\src\\main"; File file = new File(path); //获取path下子目录 Iterable<File> childrens = Files.fileTreeTraverser().children(file); for (File children : childrens) { System.out.println("子目录: " + children); } //获取path下所有目录 preOrderTraversal postOrderTraversal顺序不一样 FluentIterable<File> files = Files.fileTreeTraverser().preOrderTraversal(file); for (File file1 : files) { System.out.println("全目录: " + file1); } /** 子目录: D:\自定义代码\Guava\guava\src\main\java 子目录: D:\自定义代码\Guava\guava\src\main\resources 全目录: D:\自定义代码\Guava\guava\src\main 全目录: D:\自定义代码\Guava\guava\src\main\java 全目录: D:\自定义代码\Guava\guava\src\main\java\com 全目录: D:\自定义代码\Guava\guava\src\main\java\com\cai 全目录: D:\自定义代码\Guava\guava\src\main\java\com\cai\ya 全目录: D:\自定义代码\Guava\guava\src\main\java\com\cai\ya\cache 全目录: D:\自定义代码\Guava\guava\src\main\java\com\cai\ya\cache\LRU 全目录: D:\自定义代码\Guava\guava\src\main\java\com\cai\ya\cache\LRU\LinkedHashLRUcache.java 全目录: D:\自定义代码\Guava\guava\src\main\java\com\cai\ya\cache\LRU\LRUcache.java 全目录: D:\自定义代码\Guava\guava\src\main\java\com\cai\ya\cache\LRU\Test.java 全目录: D:\自定义代码\Guava\guava\src\main\java\com\cai\ya\cache\reference 全目录: D:\自定义代码\Guava\guava\src\main\java\com\cai\ya\cache\reference\Phantom_Reference.java 全目录: D:\自定义代码\Guava\guava\src\main\java\com\cai\ya\cache\reference\Soft_Reference.java 全目录: D:\自定义代码\Guava\guava\src\main\java\com\cai\ya\cache\reference\StrongReference.java 全目录: D:\自定义代码\Guava\guava\src\main\java\com\cai\ya\cache\reference\Weak_Reference.java 全目录: D:\自定义代码\Guava\guava\src\main\java\com\cai\ya\ClassScaner.java 全目录: D:\自定义代码\Guava\guava\src\main\java\com\cai\ya\evenbus 全目录: D:\自定义代码\Guava\guava\src\main\java\com\cai\ya\evenbus\AbstractListener.java 全目录: D:\自定义代码\Guava\guava\src\main\java\com\cai\ya\evenbus\mybus 全目录: D:\自定义代码\Guava\guava\src\main\java\com\cai\ya\evenbus\mybus\Bus.java 全目录: D:\自定义代码\Guava\guava\src\main\java\com\cai\ya\evenbus\mybus\MyDispatcher.java 全目录: D:\自定义代码\Guava\guava\src\main\java\com\cai\ya\evenbus\mybus\MyEvenBus.java 全目录: D:\自定义代码\Guava\guava\src\main\java\com\cai\ya\evenbus\mybus\MyEvenContext.java 全目录: D:\自定义代码\Guava\guava\src\main\java\com\cai\ya\evenbus\mybus\MyEvenExceptionHandle.java 全目录: D:\自定义代码\Guava\guava\src\main\java\com\cai\ya\evenbus\mybus\MyRegistry.java 全目录: D:\自定义代码\Guava\guava\src\main\java\com\cai\ya\evenbus\mybus\MySubscribe.java 全目录: D:\自定义代码\Guava\guava\src\main\java\com\cai\ya\evenbus\mybus\MySubscriber.java 全目录: D:\自定义代码\Guava\guava\src\main\java\com\cai\ya\evenbus\SimpleEventBus.java 全目录: D:\自定义代码\Guava\guava\src\main\java\com\cai\ya\evenbus\SimpleListener.java 全目录: D:\自定义代码\Guava\guava\src\main\java\com\cai\ya\evenbus\test 全目录: D:\自定义代码\Guava\guava\src\main\java\com\cai\ya\evenbus\test\EventBusTest.java 全目录: D:\自定义代码\Guava\guava\src\main\java\com\cai\ya\evenbus\test\MyListener.java 全目录: D:\自定义代码\Guava\guava\src\main\java\com\cai\ya\files 全目录: D:\自定义代码\Guava\guava\src\main\java\com\cai\ya\files\FilesTest.java 全目录: D:\自定义代码\Guava\guava\src\main\java\com\cai\ya\GuavaApplication.java 全目录: D:\自定义代码\Guava\guava\src\main\java\com\cai\ya\monitorFile 全目录: D:\自定义代码\Guava\guava\src\main\java\com\cai\ya\monitorFile\DirectoryTargetMonitor.java 全目录: D:\自定义代码\Guava\guava\src\main\java\com\cai\ya\monitorFile\MainTest.java 全目录: D:\自定义代码\Guava\guava\src\main\java\com\cai\ya\monitorFile\TargetMonitor.java 全目录: D:\自定义代码\Guava\guava\src\main\java\com\cai\ya\ratelimit 全目录: D:\自定义代码\Guava\guava\src\main\java\com\cai\ya\ratelimit\RateLimitTest.java 全目录: D:\自定义代码\Guava\guava\src\main\java\com\cai\ya\utils 全目录: D:\自定义代码\Guava\guava\src\main\java\com\cai\ya\utils\CharMatchsTest.java 全目录: D:\自定义代码\Guava\guava\src\main\java\com\cai\ya\utils\JoinerTest.java 全目录: D:\自定义代码\Guava\guava\src\main\java\com\cai\ya\utils\PreconditionsTest.java 全目录: D:\自定义代码\Guava\guava\src\main\java\com\cai\ya\utils\SplitterTest.java 全目录: D:\自定义代码\Guava\guava\src\main\java\com\cai\ya\utils\StopWatchTest.java 全目录: D:\自定义代码\Guava\guava\src\main\java\com\cai\ya\utils\StringsTest.java 全目录: D:\自定义代码\Guava\guava\src\main\resources 全目录: D:\自定义代码\Guava\guava\src\main\resources\application.properties 全目录: D:\自定义代码\Guava\guava\src\main\resources\io 全目录: D:\自定义代码\Guava\guava\src\main\resources\io\2.txt 全目录: D:\自定义代码\Guava\guava\src\main\resources\io\rest.txt 全目录: D:\自定义代码\Guava\guava\src\main\resources\log4j2.xml */ }

    自定义过滤目录

    public static void main(String[] args) { String path = "D:\\自定义代码\\Guava\\guava\\src\\main"; File file = new File(path); //preOrderTraversal postOrderTraversal顺序不一样 FluentIterable<File> files = Files.fileTreeTraverser().preOrderTraversal(file).filter(new Predicate<File>() { @Override public boolean apply(@Nullable File input) { return input.isFile(); //只要文件 } }); for (File file1 : files) { System.out.println(file1); } }

    5、写、追加文件:

    #写文件(覆盖原内容) File configPath = new File("D:/test"); Files.write("sdfsdfdsfds33334444", configPath, Charsets.UTF_8); //追加内容 File configPath1 = new File("D:/test1"); Files.append("sdfsdfdsfds33334444", configPath1, Charsets.UTF_8);

    注:文件可以不存在,guava会自动创建

    6、常用方法:

    //获取扩展名 String ext = Files.getFileExtension("D:/binom.py"); //获得不带扩展名的文件名 String fn = Files.getNameWithoutExtension("D:/binom.py"); //创建或者更新文件的时间戳 File configPath = new File("D:/aaa"); Files.touch(configPath); //获取文件的内存映射 MappedByteBuffer map = Files.map(configPath); 注:该方法实际调用的是jdk中的MappedByteBuffer,会受到文件大小不能超过2G的限制!

    7、Source和Sink:

    guava还提供了Source和Sink来对文件流进行操作,有如下方法:

    static  ByteSource  Files.asByteSourcestatic  CharSource  Files.asCharSourcestatic  ByteSink  Files.asByteSinkstatic  CharSink  Files.asCharSink

    1)Source:

    Source实现了InputSupplier,表示可读的输入流,但是跟InputSupplier不同,它是一个不可变化的supplier实例。Source分为ByteSource 和CharSource,分别用来处理字节流和字符流。Source提供了方法openStream() 返回一个新创建的输入流,可以使用这个流来读取文件内容,读取完毕后调用方要负责关闭掉。此外,Source还提供了一些快捷操作的方法,如copyTo,调用这样的方法,操作完毕后会自动关闭文件,不用考虑手动关闭文件的问题。

    2)Sink:

    与Source对应,Sink实现了OutputSupplier,表示可写的输出流,它也是一个不可变的supplier实例。Sink也分为ByteSink和CharSink,分别用来处理字节流和字符流。Sink也提供了方法openStream()返回一个新创建的输出流,可以使用这个流来写文件,完成后调用方要记得关闭掉流。Sink里面有些快捷操作方法,如writeLines,writeFrom操作完成后也是会自动关闭文件的。

    Source和Sink用起来还是很方便的,如下面一句话就可以实现文件复制了,完全不用考虑文件的关闭。

    Files.asByteSource(new File("d:/1.txt")).copyTo(Files.asByteSink(new File("d:/2.txt"),FileWriteMode.APPEND));

     

     

    最新回复(0)