此程序实现了对指定文件夹及其子文件夹的查看,运行结果截图如下:
代码:
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.RandomAccessFile;
public class FileUtil {
//读取到字节数组
public byte[] getBytesFromFile(String srcpath) {
File src = new File(srcpath);
return getBytesFromFile(src);
}
public byte[] getBytesFromFile(File src) {
byte[] dest = null;
try{
InputStream is = new BufferedInputStream(new FileInputStream(src));
ByteArrayOutputStream bos = new ByteArrayOutputStream();
byte[] flush = new byte[1024];
int len = 0;
while(-1!=(len=is.read(flush))){
bos.write(flush, 0, len);
}
bos.flush();
dest = bos.toByteArray();
bos.close();
is.close();
} catch (IOException e) {
System.out.println("获取字节数组失败");
e.printStackTrace();
}
return dest;
}
//读取
public void read(String srcpath){
File src = new File(srcpath);
read(src);
}
public void read(File src){
InputStream is = null;
try {
is = new BufferedInputStream(new FileInputStream(src));
byte[] flush = new byte[1024];
int len = 0;
while(-1!=(len=is.read(flush))){
String info = new String(flush, 0, len);
System.out.print(info);
}
System.out.println();
} catch (FileNotFoundException e) {
System.out.println("源文件不存在");
e.printStackTrace();
} catch (IOException e) {
System.out.println("读取文件失败");
e.printStackTrace();
} finally{
if(null!=is){
try {
is.close();
} catch (IOException e) {
System.out.println("关闭字节输入流失败");
e.printStackTrace();
}
}
}
}
//纯文本读取
public void readOnlyText(String srcpath){
readOnlyText(srcpath, "GBK");
}
public void readOnlyText(String srcpath, String code){
File src = new File(srcpath);
readOnlyText(src, code);
}
public void readOnlyText(File src){
readOnlyText(src, "GBK");
}
public void readOnlyText(File src, String code){
BufferedReader reader = null;
try {
reader = new BufferedReader(new InputStreamReader(new FileInputStream(src), code));
String info = null;;
while(null!=(info=reader.readLine())){
System.out.print(info);
}
System.out.println();
} catch (FileNotFoundException e) {
System.out.println("源纯文本文件不存在");
e.printStackTrace();
} catch (IOException e) {
System.out.println("纯文本文件读取失败");
e.printStackTrace();
}finally{
if(null!=reader){
try {
reader.close();
} catch (IOException e) {
System.out.println("关闭字符输入流失败");
e.printStackTrace();
}
}
}
}
//写入
public void write(String destpath){
File dest = new File(destpath);
write(dest);
}
public void write(File dest){
OutputStream os = null;
try {
os = new BufferedOutputStream(new FileOutputStream(dest));
String str = "写入文件成功!";
byte[] data = str.getBytes();
os.write(data, 0, data.length);
os.flush();
} catch (FileNotFoundException e) {
System.out.println("该文件不存在");
e.printStackTrace();
} catch (IOException e) {
System.out.println("写入文件失败");
e.printStackTrace();
} finally{
if(null!=os){
try {
os.close();
} catch (IOException e) {
System.out.println("关闭字节输出流失败");
e.printStackTrace();
}
}
}
}
//纯文本写入
public void writeOnlyText(String destpath){
writeOnlyText(destpath, "GBK");
}
public void writeOnlyText(String destpath, String code){
File dest = new File(destpath);
writeOnlyText(dest, code);
}
public void writeOnlyText(File dest){
writeOnlyText(dest, "GBK");
}
public void writeOnlyText(File dest, String code){
BufferedWriter writer = null;
try {
writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(dest), code));
String str = "写入纯文本文件成功!";
writer.write(str);
//writer.append("");
writer.flush();
} catch(FileNotFoundException e){
System.out.println("该纯文本文件不存在");
e.printStackTrace();
} catch (IOException e) {
System.out.println("写入纯文本文件失败");
e.printStackTrace();
}finally{
try {
if(null!=writer){
writer.close();
}
} catch (IOException e) {
System.out.println("关闭字符输出流失败");
e.printStackTrace();
}
}
}
//文件拷贝
public void copyFile(String srcpath, String destpath){
File src = new File(srcpath);
File dest = new File(destpath);
try {
copyFile(src, dest);
} catch (IOException e) {
System.out.println("拷贝文件失败");
e.printStackTrace();
}
}
public void copyFile(File src, File dest) throws IOException {
if(!src.isFile()){
throw new IOException("仅能拷贝文件");
}
if(dest.isDirectory()){
throw new IOException("不能建立同名文件");
}
try{
InputStream is = new BufferedInputStream(new FileInputStream(src));
OutputStream os = new BufferedOutputStream(new FileOutputStream(dest));
byte[] flush = new byte[1024];
int len = 0;
while(-1!=(len=is.read(flush))){
os.write(flush, 0, len);
}
os.flush();
os.close();
is.close();
} catch (FileNotFoundException e) {
System.out.println("该文件不存在");
e.printStackTrace();
} catch (IOException e) {
System.out.println("文件拷贝失败");
e.printStackTrace();
}
}
//纯文本文件拷贝
public void copyFileOnlyText(String srcpath, String destpath){
File src = new File(srcpath);
File dest = new File(destpath);
try {
copyFile(src, dest);
} catch (IOException e) {
System.out.println("纯文本文件拷贝失败");
e.printStackTrace();
}
}
public void copyFileOnlyText(File src, File dest) throws IOException {
if(!src.isFile()){
throw new IOException("仅能拷贝文件");
}
if(dest.isDirectory()){
throw new IOException("不能建立同名文件");
}
BufferedReader reader = null;
BufferedWriter writer = null;
try{
reader = new BufferedReader(new FileReader(src));
writer = new BufferedWriter(new FileWriter(dest));
/*
char[] flush = new char[1024];
int len = 0;
while(-1!=(len=reader.read(flush))){
writer.write(flush, 0, len);
}
*/
String line = null;
while(null!=(line=reader.readLine())){
writer.write(line);
}
System.out.println();
writer.flush();
writer.close();
reader.close();
} catch (FileNotFoundException e) {
System.out.println("该纯文本文件不存在");
e.printStackTrace();
} catch (IOException e) {
System.out.println("纯文本文件拷贝失败");
e.printStackTrace();
}
}
//文件夹拷贝
public void copyDir(String srcpath, String destpath){
File src = new File(srcpath);
File dest = new File(destpath);
copyDir(src, dest);
}
public void copyDir(File src, File dest){
if(src.isDirectory()){
dest = new File(dest, src.getName());
}
copyDirDetail(src, dest);
}
public void copyDirDetail(File src, File dest){
if(src.isFile()){
try {
copyFile(src, dest);
} catch (FileNotFoundException e) {
e.printStackTrace();
}catch (IOException e) {
e.printStackTrace();
}
}else if(src.isDirectory()){
dest.mkdirs();
for(File sub:src.listFiles()){
copyDirDetail(sub, new File(dest, sub.getName()));
}
}
}
//文件分割
public void split(String srcPath, long blockSize) {
File src =null;
if(null==srcPath||!(src=new File(srcPath)).exists()||src.isDirectory()){
return;
}
blockSize = Math.min(blockSize, src.length());
int count = (int)(Math.ceil(src.length()*1.0/blockSize));
long pos = 0;
for(int i=1; i<=count; i++){
if(i==count){
blockSize = src.length() - pos;
}
File block = null;
block = new File(src.getParent()+"/"+"part"+i+".txt");
RandomAccessFile raf =null;
BufferedOutputStream bos = null;
try {
raf = new RandomAccessFile(src, "r");
bos = new BufferedOutputStream(new FileOutputStream(block));
raf.seek(pos);
byte[] flush = new byte[1024];
int len = 0;
long size = blockSize;
while(-1!=(len=raf.read(flush))){
if(size>=len){
bos.write(flush, 0, len);
size -= len;
}else{
bos.write(flush, 0, (int)size);
break;
}
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
bos.close();
raf.close();
} catch (IOException e) {
e.printStackTrace();
}
}
pos += blockSize;
}
}
//文件夹层次图
public void printFile(String srcpath){
File src = new File(srcpath);
printFile(src, 0);
}
public void printFile(File src){
printFile(src, 0);
}
public void printFile(File src, int level){
if(src==null||!src.exists()){
return;
}
for(int i=0; i<level*2; i++){
System.out.print(" ");
}
System.out.println("--"+src.getName());
if(src.isDirectory()){
level++;
for(File sub:src.listFiles()){
printFile(sub, level);
}
}
}
}
测试:
public class Test {
public static void main(String[] args) {
FileUtil fu = new FileUtil();
System.out.println(new String(fu.getBytesFromFile("C:/Eclipse/workspace/File/test/test_get/test_getBytesFromFile.txt")));
fu.read("C:/Eclipse/workspace/File/test/test_rw/test_read.txt");
fu.write("C:/Eclipse/workspace/File/test/test_rw/test_write.txt");
fu.read("C:/Eclipse/workspace/File/test/test_rw/test_write.txt");
fu.readOnlyText("C:/Eclipse/workspace/File/test/test_rw/test_readOnlyText.txt");
fu.writeOnlyText("C:/Eclipse/workspace/File/test/test_rw/test_writeOnlyText.txt");
fu.readOnlyText("C:/Eclipse/workspace/File/test/test_rw/test_writeOnlyText.txt");
fu.copyFileOnlyText("C:/Eclipse/workspace/File/test/test_copy/test_copyFileOnlyText/src/src.txt","C:/Eclipse/workspace/File/test/test_copy/test_copyFileOnlyText/dest/dest.txt");
fu.readOnlyText("C:/Eclipse/workspace/File/test/test_copy/test_copyFileOnlyText/dest/dest.txt");
System.out.println("1.文件拷贝测试:");
System.out.println("(1)拷贝前:");
fu.printFile("C:/Eclipse/workspace/File/test/test_copy/test_copyFile");
fu.copyFile("C:/Eclipse/workspace/File/test/test_copy/test_copyFile/src/src.png","C:/Eclipse/workspace/File/test/test_copy/test_copyFile/dest/dest.png");
System.out.println("(2)拷贝后:");
fu.printFile("C:/Eclipse/workspace/File/test/test_copy/test_copyFile");
System.out.println("2.文件夹拷贝测试:");
System.out.println("(1)拷贝前:");
fu.printFile("C:/Eclipse/workspace/File/test/test_copy/test_copyDir");
fu.copyDir("C:/Eclipse/workspace/File/test/test_copy/test_copyDir/src", "C:/Eclipse/workspace/File/test/test_copy/test_copyDir/dest");
System.out.println("(2)拷贝后:");
fu.printFile("C:/Eclipse/workspace/File/test/test_copy/test_copyDir");
System.out.println("3.文件分割测试:");
System.out.println("(1)分割前:");
fu.printFile("C:/Eclipse/workspace/File/test/test_splitFile");
fu.split("C:/Eclipse/workspace/File/test/test_splitFile/test_splitFile.txt", 100000);
System.out.println("(2)分割后:");
fu.printFile("C:/Eclipse/workspace/File/test/test_splitFile");
}
}
此程序在裴新老师教学视频下完成