问题描述

关于文件操作的简单工具类,包括文件夹创建,文件夹删除,文件创建,文件重命名,文件复制,文件删除。如果需要文件夹复制,其实就是创建文件夹和复制文件的操作。

解决方案

上下文

package cn.edu.zstu.fms.context;import java.io.File;/*** @author ShenTuZhiGang* @version 1.0.0* @date 2020-12-19 15:47*/
public class SystemContext {public static String real = "." + File.separatorChar+ "dir" ;public static String now="/";public static String user="";public static String userDirectory = "/"+user;public static String Charset = "UTF-8";
}

接口

package cn.edu.zstu.fms.service;import cn.edu.zstu.fms.context.SystemContext;import java.io.File;
import java.io.IOException;/*** @author ShenTuZhiGang* @version 1.0.0* @date 2020-12-16 19:24*/
public interface IFileManagerService {void ls();String cd(String arg);Boolean cp(String filename,String newFilename) throws IOException;Boolean mv(String filename,String newFilename);Boolean mk(String filename) throws IOException;Boolean rm(String filename);Boolean mkdir(String filename);Boolean rmdir(String filename);String cat(String filename) throws IOException;String head(String filename,Integer n);String tail(String filename,Integer n);String help();default String getNowPath(){String[] strings = SystemContext.now.split(File.pathSeparator);if(SystemContext.now.startsWith(File.separatorChar+ SystemContext.user)){return SystemContext.now.replace(File.separatorChar+ SystemContext.user,"~");}return SystemContext.now;}default String getRealPath(){return SystemContext.real + SystemContext.now;}default void createUserDirectory(){File file = new File(SystemContext.real + File.separatorChar + SystemContext.user);if(!file.exists()){file.mkdirs();}};default boolean checkUserDirectory(){File file = new File(SystemContext.real + File.separatorChar + SystemContext.user);if(!file.exists()){createUserDirectory();return true;}return true;}default void init(){if(checkUserDirectory()){SystemContext.now = File.separatorChar+ SystemContext.user;}}
}

实现

package cn.edu.zstu.fms.service.impl;import cn.edu.zstu.fms.context.SystemContext;
import cn.edu.zstu.fms.service.IFileManagerService;import java.io.*;
import java.nio.file.Files;
import java.util.Arrays;/*** @author ShenTuZhiGang* @version 1.0.0* @date 2020-12-16 19:27*/
public class DiskFileManagerServiceImpl implements IFileManagerService {public DiskFileManagerServiceImpl(){File file = new File(SystemContext.real);if(!file.exists()){file.mkdirs();}}@Overridepublic void ls() {File file = new File(SystemContext.real + SystemContext.now );if(file.exists()){System.out.println(Arrays.toString(file.list()));}else{}}@Overridepublic String cd(String arg) {File file = new File(SystemContext.real + SystemContext.now + File.separatorChar  + arg);if("..".equals(arg)){file.getParent().replace(SystemContext.real,"");}else if(file.exists() && file.isDirectory()){SystemContext.now = SystemContext.now + arg;}else{System.out.println("cd: "+arg+": No such file or directory");}return SystemContext.now;}@Overridepublic Boolean cp(String filename, String newFilename) throws IOException {File srcFile = new File(SystemContext.real + SystemContext.now + File.separatorChar  + filename);File destFile = new File(SystemContext.real + SystemContext.now + File.separatorChar  + newFilename);
//      如果源文件不存在if(!srcFile.exists()){throw new RuntimeException("找不到源文件");}
//      如果目标文件不存在if(!destFile.exists()){destFile.mkdirs();}
//      如果源文件是文件if(srcFile.isFile()){//          如果目标文件是文件if(destFile.isFile()){Files.copy(srcFile.toPath(),destFile.toPath());}//           如果目标文件是文件夹else if(destFile.isDirectory()){File newFile = new File(destFile,srcFile.getName());Files.copy(srcFile.toPath(),newFile.toPath());}}
//      如果源文件是文件夹else if(srcFile.isDirectory()){if(destFile.isFile()){throw new RuntimeException("源文件是文件夹,目标文件是文件,无法进行复制");}else if(destFile.isDirectory()){File fs[] = srcFile.listFiles();for(File f:fs){File newFile = new File(destFile,f.getName());
//                  如果子级文件是文件夹,则递归if(f.isDirectory()){cp(f.getAbsolutePath(),newFile.getAbsolutePath());}if(f.isFile()){Files.copy(f.toPath(),newFile.toPath());}}}}return true;}@Overridepublic Boolean mv(String filename, String newFilename) {File file = new File(SystemContext.real + SystemContext.now + File.separatorChar  + filename);if(file.exists()){file.renameTo(new File(SystemContext.real + SystemContext.now + File.separatorChar  + newFilename));file.delete();}else{return false;}return true;}@Overridepublic Boolean mk(String filename) throws IOException {File file = new File(SystemContext.real + SystemContext.now + File.separatorChar  + filename);if(!file.exists()){file.createNewFile();}return true;}@Overridepublic Boolean rm(String filename) {File file = new File(SystemContext.real + SystemContext.now + File.separatorChar  + filename);if(!file.exists()){file.delete();}else{return false;}return true;}@Overridepublic Boolean mkdir(String filename) {File file = new File(SystemContext.real + SystemContext.now + File.separatorChar  + filename);if(!file.exists()){file.mkdirs();}return true;}@Overridepublic Boolean rmdir(String filename) {File file = new File(SystemContext.real + SystemContext.now + File.separatorChar  + filename);if(!file.exists()){file.delete();}else{return false;}return true;}@Overridepublic String cat(String filename) throws IOException {File file = new File(SystemContext.real + SystemContext.now + File.separatorChar  + filename);if(file.exists()){FileReader reader = new FileReader(file);char[] chars = new char[(int) file.length()];reader.read(chars);System.out.println(String.valueOf(chars));reader.close();return String.valueOf(chars);}return null;}@Overridepublic String head(String filename, Integer n) {File file = new File(SystemContext.real + SystemContext.now + File.separatorChar  + filename);if(file.exists()){try {FileReader fr = new FileReader(file);BufferedReader bf = new BufferedReader(fr);String str;// 按行读取字符串for (int i=0;i<n&&(str = bf.readLine()) != null;i++) {System.out.println(str);}bf.close();fr.close();} catch (IOException e) {e.printStackTrace();}}return null;}@Overridepublic String tail(String filename, Integer n) {File file = new File(SystemContext.real + SystemContext.now + File.separatorChar  + filename);RandomAccessFile rf = null;try {rf = new RandomAccessFile(file, "r");long len = rf.length();long start = rf.getFilePointer();long nextend = start + len - 1;String line;rf.seek(nextend);int c = -1;while (nextend > start) {c = rf.read();if (c == '\n' || c == '\r') {line = rf.readLine();if (line != null) {System.out.println(new String(line.getBytes("UTF-8"), "UTF-8"));}else {System.out.println(line);}nextend--;}nextend--;rf.seek(nextend);if (nextend == 0) {// 当文件指针退至文件开始处,输出第一行System.out.println(rf.readLine());}}} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} finally {try {if (rf != null) {rf.close();}} catch (IOException e) {e.printStackTrace();}}return null;}@Overridepublic String help() {return null;}
}

参考文章

  • java实现简单文件操作工具类
  • JAVA如何实现从最后一行读取文件
  • JAVA实现读取文件时,从文件的最后一行往上一行行读出来。

JAVA——文件操作工具类封装的简单实现相关推荐

  1. Code片段 : .properties属性文件操作工具类 JSON工具类

    摘要: 原创出处:www.bysocket.com 泥瓦匠BYSocket 希望转载,保留摘要,谢谢! "贵专" - 泥瓦匠 一.java.util.Properties API ...

  2. 文件操作工具类FileUtil

    分享一个文件处理的工具类,依赖如下: <dependency><groupId>org.apache.ant</groupId><artifactId> ...

  3. geotools读取shp文件及shp文件操作工具类代码

    geotools读取shp文件及shp文件操作工具类代码.pdf 完整文档下载地址 https://download.csdn.net/download/a772304419/17468931 imp ...

  4. java 配置信息_[Java教程]java 配置信息类 Properties 的简单使用

    [Java教程]java 配置信息类 Properties 的简单使用 0 2016-12-08 09:00:09 Properties :(配置信息类) 是一个表示持久性的集合 ,继承 Hashta ...

  5. 小米开源文件管理器MiCodeFileExplorer-源码研究(4)-文件操作工具类FileOperationHelper

    文件操作是非常通用的,注释都写在源代码中了,不多说~ 需要特别说明的是,任务的异步执行和IOperationProgressListener. 拷贝和删除等操作,是比较费时的,采用了异步执行的方式~ ...

  6. java响应实体类封装

    前后端分离的开发模式中,或者与第三方接口交互,需要规范接口响应,下面是我在开发中的封装的一组响应实体类 响应实体父类, 父类中需要一个code,因为不管是响应消息还是数据,都要有code /**- @ ...

  7. Java 分页实体类封装

    在开发中我们经常会用到的分页实体类,这里封装一个简单的分页实体类 package com.xxx.xxx.page;import java.util.List; import java.util.Ob ...

  8. 手写一个好用的Java FTP操作工具类

    前言 网上百度了很多FTP的java 工具类,发现文章代码都比较久远,且代码臃肿,即使搜到了代码写的还可以的,封装的常用操作方法不全面,于是自己花了半天实现一个好用的工具类.最初想用java自带的FT ...

  9. Java文件压缩工具类ZipUtils学习笔记

    最近工作中用到了文件的压缩,经过在网上查询和自己的摸索总结如下工具了,支持文件压缩,嵌套文件压缩: package utils;import java.io.File; import java.io. ...

最新文章

  1. 编程基础 垃圾回收_为什么我回收编程问题
  2. 唐筛的准确率这么低为什么还要做_做注塑这么苦,为什么你还要坚持?
  3. 814:The Letter Carrier's Rounds
  4. 查询除了一列意外_想让你的查询语句变快吗?
  5. android开源2016_开源多样性努力在2016年获得动力
  6. Pytorch:初始化
  7. HDU 4115 Eliminate the Conflict【2011 ACM Asia Chengdu Regional Problem E】
  8. PCB名詞解釋:通孔、盲孔、埋孔(转载)
  9. Sqlite和mysql的区别及优缺点
  10. Django REST Framework API Guide 05
  11. zend studio 本地调试php,Zend Studio调试php教程
  12. 用户故事(一):什么是用户故事?
  13. 机器学习——神经网络
  14. matlab正太分布的反函数,怎样用matlab求标准正态分布函数的反函数函数值
  15. java lame_音视频编解码——LAME
  16. 网络文件常常提到类似./run.sh的数据,这个命令的意义是什么?
  17. Overload vs Override
  18. 多可文档管理迁移说明
  19. DP(动态规划)入门(一)
  20. 罗克韦尔自动化2018年自动化博览会开始接受注册

热门文章

  1. vim 折叠的用法
  2. Android开发之系统信息——获取Android手机中SD卡内存信息
  3. think in baidu
  4. java网络编程udp_Java网络编程之UDP
  5. cad打印字体颜色很淡_收藏|50个CAD技巧,常画电路图的你一定得知道
  6. redis 2m数据读取_Flink读写Redis(二)读取redis数据
  7. mysql数据对比同步_跨数据库mysql语句同步数据和对比运算
  8. 最大流最小割经典例题_C/C++知识点之最大流最小割C++实现
  9. Spring添加对缓存的支持
  10. cmd批处理命令与变量(下)