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();
}

}

对IO流的操作(文件大小,拷贝,移动,删除)的更多相关文章

  1. C# IO流的操作

    C# IO流的操作非常重要,我们读写文件都会使用到这个技术,这里先演示一个文件内容复制的例子,简要说明C#中的IO操作. namespace ConsoleApplication1 { class P ...

  2. Java---IO加强(3)-IO流的操作规律

    一般写关于操作文件的读取的几个通用步骤!!! 1.明确源和目的. 源:InputStream Reader 一定是被读取的. 目的:OutputStream Writer 一定是被写入的. 2.处理的 ...

  3. C# IO流的操作(一)

    C# IO流的操作非常重要,我们读写文件都会使用到这个技术,这里先演示一个文件内容复制的例子,简要说明C#中的IO操作. namespace ConsoleApplication1 { class P ...

  4. Java文件IO流的操作总结

    Java中的IO操作涉及到的概念及相关类很多,很容易弄混,今天特来整理总结一下,并附上一份完整的文件操作的代码. 概念解析 读和写 流就是管道,向管道里面写数据用输出流:write 从管道里面读数据, ...

  5. IO流常规操作

    IO流 IO就是输入输出,IO设备在计算机中起着举足轻重的作用,IO流也就是输入输出流,用来交互数据,程序和程序交互,程序也可以和网络等媒介交互. 一.IO流的分类 要分类,肯定得站得不同角度来看这个 ...

  6. Java API —— IO流(数据操作流 & 内存操作流 & 打印流 & 标准输入输出流 & 随机访问流 & 合并流 & 序列化流 & Properties & NIO)

    1.操作基本数据类型的流     1) 操作基本数据类型 · DataInputStream:数据输入流允许应用程序以与机器无关方式从底层输入流中读取基本 Java 数据类型.应用程序可以使用数据输出 ...

  7. IO流的操作规律

    输入流和输出流相对于内存设备而言. 将外设中的数据读取到内存中:输入将内存的数写入到外设中:输出. 字符流的由来:其实就是:字节流读取文字字节数据后,不直接操作而是先查指定的编码表.获取对应的文字.在 ...

  8. IO流-文件夹的拷贝

    文件夹的拷贝操作 要求: 完成文件夹的拷贝,包括子目录的拷贝和所有文件的拷贝 分析: 首先,得在目标目录下创建一个与源文件夹名称相同的文件夹 遍历源文件夹中的所有文件对象,判断子文件是目录还是文件 如 ...

  9. 在c#中IO流读写操作

    1.使用FileStream读写文件 文件头: using System;using System.Collections.Generic;using System.Text;using System ...

随机推荐

  1. 一个基于JRTPLIB的轻量级RTSP客户端(myRTSPClient)——解码篇:(一)用ffmpeg解码视频

    一.概述 myRTSPClient(RTSPClient)获取音视频数据之后,接下来的工作便是将音视频数据交给解码器去解码(ffmpeg),ffmpeg解码之后于是便有了呈现在终端用户(USER)面前 ...

  2. c语言 创建链表

    #include "malloc.h" #include "stdio.h" #define LEN sizeof(struct student) typede ...

  3. Win7怎么把运行添加到Win快捷菜单的右侧、、、

    win7怎么把运行添加到Win快捷菜单的右侧... ------------------------------ 右键桌面任务栏--选择属性 ----------------------------- ...

  4. [js高手之路]设计模式系列课程-发布者,订阅者重构购物车

    发布者订阅者模式,是一种很常见的模式,比如: 一.买卖房子 生活中的买房,卖房,中介就构成了一个发布订阅者模式,买房的人,一般需要的是房源,价格,使用面积等信息,他充当了订阅者的角色 中介拿到卖主的房 ...

  5. vue-cli脚手架npm相关文件解读(9)config/index.js

    系列文章传送门: 1.build/webpack.base.conf.js 2.build/webpack.prod.conf.js 3.build/webpack.dev.conf.js 4.bui ...

  6. Html5笔记之小结

    随着Android,IOS手机,平板等各种App的不断扩增,加上对过去传统HTML的的各种不完善,例如视频依靠Flash,对手机和桌面的不兼容等等.HTML5来了,来解决这些问题了. Html5是W3 ...

  7. [读书笔记] 一、Spring boot项目搭建与配置文件

    读书笔记:[JavaEE开发的颠覆者 Spring Boot实战] 作者:汪云飞 从今天开始坚持读书,并记录下此读书笔记. 一,初接触 Spring boot 项目Hello world搭建 1.po ...

  8. ASP.NET Core 2.0 自定义 _ViewStart 和 _ViewImports 的目录位置

    在 ASP.NET Core 里扩展 Razor 查找视图目录不是什么新鲜和困难的事情,但 _ViewStart 和 _ViewImports 这2个视图比较特殊,如果想让 Razor 在我们指定的目 ...

  9. Codis分布式锁

    近期一项需求需要使用分布式锁,考虑的方案主要有如下两种: zookeeper codis 因为对于zookeeper不是特别熟悉,因此选用了codis,Codis是一个分布式的Redis解决方案,从应 ...

  10. xcode模拟器不显示键盘解决方案

    当我们使用Xcode进行开发的时候,并不是所有的时候都需要将代码运行在iPhone,有时候模拟器就可以解决这些问题, 但是当你使用模拟器的时候会发现,在TextFiled中输入信息时,如果你是用模拟器 ...