当前位置: 首页 > news >正文

对IO流的操作(文件大小,拷贝,移动,删除)

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.SequenceInputStream;

class LjyFileClass {

/*LjyFileClass工具类使用需知:

*
* 1.计算文件大小:long size = getFileSize(File file)
* file:传入一个文件路径,计算文件夹中所有的文件大小,
* 返回值是一个long类型的字节数。
*
*
* 2.拷贝文件夹:getCopyFile(File filePath,File newFilePath)
* filePath: 需要拷贝的文件路径,
* newFilePath: 存放文件的路径
* 使用时只需要传入要拷贝的路径和一个存放的路径就可以了。
*
*
* 3.字节流拷贝图片,视频,音频等文件:getCopyFileContent(File file,File file2)
* file: 要拷贝的文件路径
* file2: 存放路径
* 字节流适用于拷贝图片,视频,音频等一些不需要解码的文件,
* 使用时只需要传入要拷贝的路径和一个存放的路径就可以了。
*
*
* 4.字符流拷贝文件:getFileRead(File file , File file2)
* file: 要拷贝的文件路径
* file2: 存放路径
* 字符流适用于拷贝一些需要解码操作的文件,但是不能实用字符流来拷贝图片,音频,
* 视频等。使用字符流可能会导致文件丢失。而不能正常打开。
*
*
* 5.MergeFile(File file , File file2,File file3):合并两个文件
* file: 需要合并的文件路径
* file2: 需要合并的文件路径
* file3: 合并之后的文件路径
*
* 该方法可以实现两个文件的拼接,并且返回一个新的文件。
*
*
* 6.MoveFileToNewPath(File file, File file2):把目标文件移动到指定的路径下
* file: 需要移动的文件路径
* file2: 接收移动过来的文件路径
* 该方法可以把一个文件夹移动到指定的路径下,并且删除原来的文件。
*
*
* 7.getDeleteFile(File file):删除整个文件夹
* file:要删除的文件夹路径
* 该方法可以实现整个文件夹的删除工作。
*
*
*
* 方法摘要:
* 1.getFileSize(File file) 返回文件大小
* 2.getCopyFile(File filePath,File newFilePath) 拷贝文件夹
* 3.getCopyFileContent(File file,File file2) 字节流拷贝图片,视频,音频等文件
* 4.getFileRead(File file , File file2) 字符流拷贝文件
* 5.MergeFile(File file , File file2,File file3) 合并两个文件
* 6.MoveFileToNewPath(File file, File file2) 把目标文件移动到指定的路径下
* 7.getDeleteFile(File file) 删除整个文件夹
*/

//获取文件大小,只需传一个文件路径的实参,返回值是文件大小(long类型),返回值只表示文件的字节大小。
public long getFileSize(File file){
long fileSize = 0;
File[] files = file.listFiles();

if (file.isFile()) {
  return file.length();
}
if (file != null) {
  for (File file2 : files) {
    fileSize += getFileSize(file2);
  }
}
return fileSize;
}


//把一个文件夹拷贝到另一个文件夹里
public void getCopyFile(File filePath,File newFilePath) throws IOException{
File[] files = filePath.listFiles();
File tempFile = null;
if (!(newFilePath.isDirectory())) {
  newFilePath.mkdir();
}
if (filePath != null) {
  for (File file : files) {
    if (file.isDirectory()) {
      String string = file.getName();
      tempFile = new File(newFilePath+"\\"+string);
      tempFile.mkdir();
      getCopyFile(file, tempFile);

    }else if (file.isFile()) {
      String string = file.getName();
      tempFile = new File(newFilePath+"\\"+string);
      tempFile.createNewFile();
      getCopyFileContent(file,tempFile);
    }
  }
}

}

//拷贝图片,视频,音频等不需解码的文件
public void getCopyFileContent(File file,File file2) throws IOException{

FileInputStream inputStream = new FileInputStream(file);
FileOutputStream outputStream = new FileOutputStream(file2);

byte[] b = new byte[1024];
int count = 0;
while ((count = inputStream.read(b)) != -1) {
  outputStream.write(b,0,count);
}
inputStream.close();
outputStream.close();
}

//用字符流来拷贝,当用此方法来拷贝图片,视频,音频等文件时,这些文件将不能被打开。
public void getFileRead(File file , File file2) throws IOException {
FileReader fileReader = new FileReader(file);
FileWriter fileWriter = new FileWriter(file2);
char[] b = new char[1024];
int count = 0;
while ((count = fileReader.read(b)) != -1) {
  fileWriter.write(b,0,count);
}

fileWriter.close();
fileReader.close();
}

//合并文件
public void MergeFile(File file , File file2, File file3) throws IOException {

FileInputStream fileInputStream = new FileInputStream(file);
FileInputStream fileInputStream2 = new FileInputStream(file2);
FileOutputStream outputStream = new FileOutputStream(file3);
SequenceInputStream inputStream = new SequenceInputStream(fileInputStream, fileInputStream2);

byte[] b = new byte[1024];
while (inputStream.read(b) != -1) {
  outputStream.write(b);
}
outputStream.close();
inputStream.close();
}

//把文件移动到新的路径下 file:要移动的路径 file2:接收移动的路径
public void MoveFileToNewPath(File file, File file2) throws IOException{
File file3 = new File(file2.getPath() + "\\" + file.getName());
//把文件复制到指定的路径上
getCopyFile(file, file3);
//清空原来的文件夹并且删除
getDeleteFile(file);
}

//递归删除整个文件夹
public void getDeleteFile(File file){

File[] files = file.listFiles();
if (file != null) {
  for (File file2 : files) {
    if (file2.isDirectory()) {
      getDeleteFile(file2);
    }else {
      file2.delete();
    }
  }
}
file.delete();
}


//剪切文件
public void ShearFile() {

}

}

public class demo {

/**
* 1.创建文件
* 2.创建文件夹
* 3.查找以结尾
* 4.判断是否是一个文件
* 5.判断是否是一个文件夹
* 6.
*
*/
public static void main(String[] args) throws IOException {
LjyFileClass ljyFileClass = new LjyFileClass();

// File file = new File("C:\\Users\\PC-LUO\\Desktop\\新建文件夹\\1.jpg");
// File file2 = new File("C:\\Users\\PC-LUO\\Desktop\\新建文件夹\\新建文件夹\\1.jpg");
//
// ljyFileClass.getCopyFileContent(file, file2);

File file3 = new File("C:\\1111");
file3.mkdir();
}

}

转载于:https://www.cnblogs.com/12kk/p/7560202.html

相关文章:

  • 【NetApp】关于walfiron命令的一点资料
  • 电商总结(八)如何打造一个小而精的电商网站架构
  • java正则表式的使用
  • grub修复
  • (转)es进行聚合操作时提示Fielddata is disabled on text fields by default
  • LXD 2.0系列之二:LXD安装和配置
  • Java调用JavaFX的方法
  • ORA-04089: 无法对 SYS 拥有的对象创建触发器
  • Java获取URL中的顶级域名domain的工具类
  • CSS实现空心三角指示箭头
  • TPYBoard开发板ADC数模转换一: 初识ADC使用
  • no.4 数据和C 06
  • W3School Redis教程(安装/基本操作/高级操作/命令/官方文档/官方集群教程)
  • Go语言与数据库开发:01-06
  • js 日期计算
  • (ckeditor+ckfinder用法)Jquery,js获取ckeditor值
  • 【MySQL经典案例分析】 Waiting for table metadata lock
  • Android交互
  • css属性的继承、初识值、计算值、当前值、应用值
  • httpie使用详解
  • Javascript基础之Array数组API
  • React 快速上手 - 06 容器组件、展示组件、操作组件
  • Spark VS Hadoop:两大大数据分析系统深度解读
  • SpiderData 2019年2月16日 DApp数据排行榜
  • text-decoration与color属性
  • 从PHP迁移至Golang - 基础篇
  • 聊聊directory traversal attack
  • 人脸识别最新开发经验demo
  • 如何利用MongoDB打造TOP榜小程序
  • 小李飞刀:SQL题目刷起来!
  • 云栖大讲堂Java基础入门(三)- 阿里巴巴Java开发手册介绍
  • 怎么将电脑中的声音录制成WAV格式
  • 国内开源镜像站点
  • 昨天1024程序员节,我故意写了个死循环~
  • ​比特币大跌的 2 个原因
  • ​软考-高级-系统架构设计师教程(清华第2版)【第1章-绪论-思维导图】​
  • ​云纳万物 · 数皆有言|2021 七牛云战略发布会启幕,邀您赴约
  • (二)Linux——Linux常用指令
  • (附源码)spring boot基于小程序酒店疫情系统 毕业设计 091931
  • (力扣记录)235. 二叉搜索树的最近公共祖先
  • (论文阅读笔记)Network planning with deep reinforcement learning
  • (实战)静默dbca安装创建数据库 --参数说明+举例
  • (四) Graphivz 颜色选择
  • (四)图像的%2线性拉伸
  • (转)IIS6 ASP 0251超过响应缓冲区限制错误的解决方法
  • (轉貼) UML中文FAQ (OO) (UML)
  • .bat批处理(二):%0 %1——给批处理脚本传递参数
  • .Family_物联网
  • .net core 6 集成 elasticsearch 并 使用分词器
  • .NET MVC、 WebAPI、 WebService【ws】、NVVM、WCF、Remoting
  • .NET 反射的使用
  • .NET 设计模式—简单工厂(Simple Factory Pattern)
  • .NET 使用 XPath 来读写 XML 文件
  • .NET 中什么样的类是可使用 await 异步等待的?
  • .NET建议使用的大小写命名原则