创建一个自用的文件对象Bo和Po实体类
通过构造函数读取File的信息,减少工作量
po类
package com.faker.app.po;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.attribute.BasicFileAttributeView;
import java.nio.file.attribute.BasicFileAttributes;
import java.util.Date;
/**
* <p>Title: Python文件信息及属性实体类 - PyFileAttrPo</p>
*
* <p>Description:Python文件信息及属性实体类</p>
*
* <p>Copyright: Copyright Faker(c) 2018</p>
*
* <p>Company: 无</p>
*
* @author 你猜
*
* @version 1.0
*/
public class PyFileAttrPo {
/** 文件本身 */
private File file;
/** 文件名 */
private String fileName;
/** 文件名前缀 */
private String fileNamePre;
/** 文件名后缀 */
private String fileNameSuffix;
/** 文件创建时间戳 */
private Date creationTime;
/** 文件最后访问时间戳 */
private Date lastAccessTime;
/** 文件最后修改时间戳 */
private Date lastModifiedTime;
/** 文件大小 */
private Long fileSize;
/**
* 无参构造
*/
public PyFileAttrPo() {
}
/**
* 将文件转化为文件属性
* @param file
*/
public PyFileAttrPo(File file) {
//获取文件
try {
this.file = file;
} catch (Exception e) {
e.printStackTrace();
}
//获取文件名和后缀
try {
this.fileName = file.getName();
} catch (Exception e) {
e.printStackTrace();
}
//文件名后缀
try {
this.fileNameSuffix = this.fileName.substring(this.fileName.lastIndexOf(".") + 1);
} catch (Exception e) {
e.printStackTrace();
}
//文件名前缀
try {
this.fileNamePre = this.fileName.substring(0,this.fileName.lastIndexOf("."));
} catch (Exception e) {
e.printStackTrace();
}
try {
// 获取将要操作的文件
Path testPath = Paths.get(file.getPath());
BasicFileAttributeView basicView = Files.getFileAttributeView(
testPath , BasicFileAttributeView.class);
// 获取访问基本属性的BasicFileAttributes
BasicFileAttributes basicAttribs = null;
try {
basicAttribs = basicView.readAttributes();
//创建时间
try {
this.creationTime = new Date(basicAttribs.creationTime().toMillis());
} catch (Exception e) {
e.printStackTrace();
}
//最后访问时间
try {
this.lastAccessTime = new Date(basicAttribs.lastModifiedTime().toMillis());
} catch (Exception e) {
e.printStackTrace();
}
//最后修改时间
try {
this.lastModifiedTime = new Date(basicAttribs.lastModifiedTime().toMillis());
} catch (Exception e) {
e.printStackTrace();
}
//文件大小
try {
this.fileSize = basicAttribs.size();
} catch (Exception e) {
e.printStackTrace();
}
} catch (IOException e) {
e.printStackTrace();
}
} catch (Exception e) {e.printStackTrace();}
}
public File getFile() {
return file;
}
public void setFile(File file) {
this.file = file;
}
public String getFileName() {
return fileName;
}
public void setFileName(String fileName) {
this.fileName = fileName;
}
public String getFileNamePre() {
return fileNamePre;
}
public void setFileNamePre(String fileNamePre) {
this.fileNamePre = fileNamePre;
}
public String getFileNameSuffix() {
return fileNameSuffix;
}
public void setFileNameSuffix(String fileNameSuffix) {
this.fileNameSuffix = fileNameSuffix;
}
public Date getCreationTime() {
return creationTime;
}
public void setCreationTime(Date creationTime) {
this.creationTime = creationTime;
}
public Date getLastAccessTime() {
return lastAccessTime;
}
public void setLastAccessTime(Date lastAccessTime) {
this.lastAccessTime = lastAccessTime;
}
public Date getLastModifiedTime() {
return lastModifiedTime;
}
public void setLastModifiedTime(Date lastModifiedTime) {
this.lastModifiedTime = lastModifiedTime;
}
public Long getFileSize() {
return fileSize;
}
public void setFileSize(Long fileSize) {
this.fileSize = fileSize;
}
@Override
public String toString() {
return "PyFileAttrPo{" +
"file=" + file +
", fileName='" + fileName + '\'' +
", fileNamePre='" + fileNamePre + '\'' +
", fileNameSuffix='" + fileNameSuffix + '\'' +
", creationTime=" + creationTime +
", lastAccessTime=" + lastAccessTime +
", lastModifiedTime=" + lastModifiedTime +
", fileSize=" + fileSize +
'}';
}
}
感觉try/catch块用得太多了…
Bo类 主要是把文件时间和大小转换一下
package com.faker.app.bo;
import com.faker.app.po.PyFileAttrPo;
import java.io.File;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* <p>Title: Python文件信息及属性实体类 - PyFileAttrBo</p>
*
* <p>Description:Python文件信息及属性实体类,新增了时间格式化和中文说明</p>
*
* <p>Copyright: Copyright Faker(c) 2018</p>
*
* <p>Company: 无</p>
*
* @author 你猜
*
* @version 1.0
*/
public class PyFileAttrBo extends PyFileAttrPo{
/** 文件创建时间 */
private String creationTimeStr;
/** 文件最后访问时间 */
private String lastAccessTimeStr;
/** 文件最后修改时间 */
private String lastModifiedTimeStr;
/** 文件大小 */
private String fileSizeStr;
public String getCreationTimeStr() {
try {
this.creationTimeStr = stampToDate(super.getCreationTime());
} catch (Exception e) {
e.printStackTrace();
}
return creationTimeStr;
}
public void setCreationTimeStr(String creationTimeStr) {
this.creationTimeStr = creationTimeStr;
}
public String getLastAccessTimeStr() {
try {
this.lastAccessTimeStr = stampToDate(super.getLastAccessTime());
} catch (Exception e) {
e.printStackTrace();
}
return lastAccessTimeStr;
}
public void setLastAccessTimeStr(String lastAccessTimeStr) {
this.lastAccessTimeStr = lastAccessTimeStr;
}
public String getLastModifiedTimeStr() {
try {
this.lastModifiedTimeStr = stampToDate(super.getLastModifiedTime());
} catch (Exception e) {
e.printStackTrace();
}
return lastModifiedTimeStr;
}
public void setLastModifiedTimeStr(String lastModifiedTimeStr) {
this.lastModifiedTimeStr = lastModifiedTimeStr;
}
public String getFileSizeStr() {
try {
this.fileSizeStr = getPrintSize(super.getFileSize());
} catch (Exception e) {
e.printStackTrace();
}
return fileSizeStr;
}
public void setFileSizeStr(String fileSizeStr) {
this.fileSizeStr = fileSizeStr;
}
public PyFileAttrBo() {
}
/**
* 文件的构造函数,自动生成文件信息
* @param file
*/
public PyFileAttrBo(File file) {
super(file);
try {
this.creationTimeStr = stampToDate(super.getCreationTime());
} catch (Exception e) {
e.printStackTrace();
}
try {
this.lastAccessTimeStr = stampToDate(super.getLastAccessTime());
} catch (Exception e) {
e.printStackTrace();
}
try {
this.lastModifiedTimeStr = stampToDate(super.getLastModifiedTime());
} catch (Exception e) {
e.printStackTrace();
}
try {
this.fileSizeStr = getPrintSize(super.getFileSize());
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 格式化时间
* @param date 时间
* @return 格式化后的时间时间
*/
public String stampToDate(Date date){
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
return simpleDateFormat.format(date);
}
/**
* 将文件字节数转换为kb/mb/Gb等
* @param size 字节数
* 这块引用了https://blog.youkuaiyun.com/layman1024/article/details/77988079
* @return 转换后的字符串
*/
public String getPrintSize(long size) {
// 如果字节数少于1024,则直接以B为单位,否则先除于1024,后3位因太少无意义
double value = (double) size;
if (value < 1024) {
return String.valueOf(value) + "B";
} else {
value = new BigDecimal(value / 1024).setScale(2, BigDecimal.ROUND_DOWN).doubleValue();
}
// 如果原字节数除于1024之后,少于1024,则可以直接以KB作为单位
// 因为还没有到达要使用另一个单位的时候
// 接下去以此类推
if (value < 1024) {
return String.valueOf(value) + "KB";
} else {
value = new BigDecimal(value / 1024).setScale(2, BigDecimal.ROUND_DOWN).doubleValue();
}
if (value < 1024) {
return String.valueOf(value) + "MB";
} else {
// 否则如果要以GB为单位的,先除于1024再作同样的处理
value = new BigDecimal(value / 1024).setScale(2, BigDecimal.ROUND_DOWN).doubleValue();
return String.valueOf(value) + "GB";
}
}
@Override
public String toString() {
return "PyFileAttrBo{" +
"creationTimeStr='" + creationTimeStr + '\'' +
", lastAccessTimeStr='" + lastAccessTimeStr + '\'' +
", lastModifiedTimeStr='" + lastModifiedTimeStr + '\'' +
", fileSizeStr='" + fileSizeStr + '\'' +
"} " + super.toString();
}
}
最后读取到的对象大概是这个样子的(file已set为null了)
{
"file": null,
"fileName": "Python_main.py",
"fileNamePre": "Python_main",
"fileNameSuffix": "py",
"creationTime": 1543471776025,
"lastAccessTime": 1543475322461,
"lastModifiedTime": 1543475322461,
"fileSize": 6562,
"creationTimeStr": "2018-11-29 14:09:36",
"lastAccessTimeStr": "2018-11-29 15:08:42",
"lastModifiedTimeStr": "2018-11-29 15:08:42",
"fileSizeStr": "6.4KB"
}