开始时间 2020-12-01
DataInputStream、DataOutputStream
package BUPT20201130;
import java.io.*;
/*
Java.IO.DataOutputStream
可以将数据连同数据的类型一并写入文件
写入的文件只能用DataInputStream去读
并且必须要知道提前写的顺序
*/
public class DataInputStreamTest01 {
public static void main(String[] args) throws Exception {
DataInputStream dataInputStream = new DataInputStream(new FileInputStream("data"));
byte b = dataInputStream.readByte();
short s = dataInputStream.readShort();
boolean sex = dataInputStream.readBoolean();
char c = dataInputStream.readChar();
System.out.println(b);
System.out.println(s);
System.out.println(sex);
System.out.println(c);
dataInputStream.close();
}
}
package BUPT20201130;
import java.io.DataOutputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
/*
Java.IO.DataOutputStream
可以将数据连同数据的类型一并写入文件
*/
public class DataOutputStreamTest01 {
public static void main(String[] args) throws IOException {
//写入的不是普通文本文件了,记事本打开会乱码
DataOutputStream dataOutputStream = new DataOutputStream(new FileOutputStream("data"));
byte b = 10;
short s = 200;
boolean sex = true;
char c = 'a';
//把数据和数据类型一并写入类型当中
dataOutputStream.writeByte(b);
dataOutputStream.writeShort(s);
dataOutputStream.writeBoolean(sex);
dataOutputStream.writeChar(c);
dataOutputStream.flush();
dataOutputStream.close();
}
}
标准输出流
记录日志
package BUPT20201130;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.PrintStream;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Logger {
public static void log(String msg) throws FileNotFoundException {
//指向文件
PrintStream printStream = new PrintStream(new FileOutputStream("log.txt", true));
//改变输出方向
System.setOut(printStream);
//获取当前时间
Date nowTime = new Date();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS");
String s = simpleDateFormat.format(nowTime);
System.out.println(s + ":" + msg);
}
}
package BUPT20201130;
import java.io.FileNotFoundException;
public class LogTest {
public static void main(String[] args) throws FileNotFoundException {
Logger.log("调用该方法成功");
}
}
File类
File代表一个文件或者目录路径名的抽象表示形式
常用的几种方法
package BUPT20201130;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
/*
不是流,不是直接用于读写
*/
public class FileTest {
public static void main(String[] args) throws IOException {
/*
F:\编程学习\Java学习
F:\编程学习\Java学习\学习啊.txt
两个都是File对象
常用方法
*/
File file = new File("F:\\编程学习\\Java学习\\File");
//可以判断是否存在
System.out.println(file.exists());
//如果File文件不存在,就以文件的形式创一个出来
if (!file.exists()) {
//以文件形式新建
file.createNewFile();
/*
以目录的形式新建
file.mkdir();
*/
}
File file1 = new File("F:\\编程学习\\Java学习\\file\\DoubleKill\\b\\c");
System.out.println(file1.exists());
if (!file1.exists()) {
//以多重目录的形式新建
file1.mkdirs();
}
//获取父路径
File file2 = new File("F:\\编程学习\\Java学习\\学习啊.txt");
String parentPath = file2.getParent();
System.out.println(parentPath);
File parentFile = file2.getParentFile();
//获取绝对路径
System.out.println("绝对路径" + parentFile.getAbsolutePath());
}
}
这种遍历得到文件/文件名/所有子目录
Python中也有
参考Python中的操作
package BUPT20201130;
import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;
public class FileTest02 {
public static void main(String[] args) {
File file = new File("F:\\编程学习\\Java学习\\学习啊.txt");
//获取文件名
System.out.println("文件名是:" + file.getName());
//判断是文件还是文件夹
System.out.println(file.isFile());
System.out.println(file.isDirectory());
//获取最后一次修改时间
long time = file.lastModified();
Date Time = new Date(time);
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String string = simpleDateFormat.format(Time);
System.out.println(string);
//获取文件大小
System.out.println(file.length());
}
}
package BUPT20201130;
import java.io.File;
public class FileTest03 {
public static void main(String[] args) {
//获取所有子目录
File f = new File("F:\\编程学习\\Java学习");
File[] files=f.listFiles();
for(File fil :files){
System.out.println(fil.getAbsolutePath());
}
}
}
复制目录
import java.io.File;
public class CopyAll {
public static void main(String[] args) {
//拷贝源
File srcFile=new File("E:\\研一\\研读论文");
//拷贝目标
File destFile=new File("F:\\新建论文");
//调用方法拷贝
copyDir(srcFile,destFile);
}
private static void copyDir(File srcFile, File destFile) {
//获取源下面的子目录
File files[]=srcFile.listFiles();
//先对读取的files进行测试
System.out.println(files.length);
}
}
进一步更新版本
考虑读取目录所有文件,所有子文件夹以及子文件夹下的所有文件
private static void copyDir(File srcFile, File destFile) {
if(srcFile.isFile()){
//如果srcFile是一个文件,递归结束
return;
}
//获取源下面的子目录
File files[]=srcFile.listFiles();
//先对读取的files进行测试,有可能是目录有可能是文件
for(File file:files){
//递归调用,能够读取目录下的所有文件,以及子文件夹下的所有文件
System.out.println(file.getAbsolutePath());
copyDir(file,destFile);
}
}
进一步考虑建立粘贴到的目标文件夹下的目录
private static void copyDir(File srcFile, File destFile) {
if(srcFile.isFile()){
//如果srcFile是一个文件,递归结束
return;
}
//获取源下面的子目录
File files[]=srcFile.listFiles();
//先对读取的files进行测试,有可能是目录有可能是文件
for(File file:files){
//递归调用,能够读取目录下的所有文件,以及子文件夹下的所有文件
if(file.isDirectory()) {
// System.out.println(file.getAbsolutePath());
String srcDir=file.getAbsolutePath();
//把盘符截掉
//System.out.println(srcDir.substring(3));
String destDir=(destFile.getAbsolutePath().endsWith("\\")?destFile.getAbsolutePath():destFile.getAbsolutePath()+"\\")+srcDir.substring(3);
System.out.println(destDir);
}
copyDir(file,destFile);
}
}
做出所有目标文件夹
private static void copyDir(File srcFile, File destFile) {
if(srcFile.isFile()){
//如果srcFile是一个文件,递归结束
return;
}
//获取源下面的子目录
File files[]=srcFile.listFiles();
//先对读取的files进行测试,有可能是目录有可能是文件
for(File file:files){
//递归调用,能够读取目录下的所有文件,以及子文件夹下的所有文件
if(file.isDirectory()) {
// System.out.println(file.getAbsolutePath());
String srcDir=file.getAbsolutePath();
//把盘符截掉
//System.out.println(srcDir.substring(3));
String destDir=(destFile.getAbsolutePath().endsWith("\\")?destFile.getAbsolutePath():destFile.getAbsolutePath()+"\\")+srcDir.substring(3);
System.out.println(destDir);
File newFile=new File(destDir);
if(!newFile.exists()){
newFile.mkdirs();
}
}
copyDir(file,destFile);
}
}
最终成型
import java.io.*;
public class CopyAll {
public static void main(String[] args) throws IOException {
//拷贝源
File srcFile = new File("E:\\研一\\研读论文");
//拷贝目标
File destFile = new File("F:\\新建论文\\");
//调用方法拷贝
copyDir(srcFile, destFile);
}
private static void copyDir(File srcFile, File destFile) {
if (srcFile.isFile()) {
//如果srcFile是一个文件,递归结束
FileInputStream inputStream = null;
FileOutputStream outputStream = null;
try {
//可以把File传到FileinputStream
//读和写
inputStream = new FileInputStream(srcFile);
String path = (destFile.getAbsolutePath().endsWith("\\") ? destFile.getAbsolutePath() : destFile.getAbsolutePath() + "\\") + srcFile.getAbsolutePath().substring(3);
outputStream = new FileOutputStream(path);
byte[] bytes = new byte[1024 * 1024];//一次复制一兆
int readCount = 0;
while ((readCount = inputStream.read(bytes)) != -1) {
outputStream.write(bytes, 0, readCount);
}
outputStream.flush();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (outputStream != null) {
try {
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (inputStream != null) {
try {
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return;
}
//获取源下面的子目录
File files[] = srcFile.listFiles();
//先对读取的files进行测试,有可能是目录有可能是文件
for (File file : files) {
//递归调用,能够读取目录下的所有文件,以及子文件夹下的所有文件
System.out.println(file.getAbsolutePath());
if (file.isDirectory()) {
//System.out.println(file.getAbsolutePath());
String srcDir = file.getAbsolutePath();
//把盘符截掉
//System.out.println(srcDir.substring(3));
String destDir = (destFile.getAbsolutePath().endsWith("\\") ? destFile.getAbsolutePath() : destFile.getAbsolutePath() + "\\") + srcDir.substring(3);
File newFile = new File(destDir);
if (!newFile.exists()) {
newFile.mkdirs();
}
}
//递归调用
copyDir(file, destFile);
}
}
}
虽然所有的文件都实现了复制
但是还是存在一点报错
结束时间:2021-1-4