基本文件读写 - Android
本篇文章记录的是Java应用中的基本文件读写.
文件
1.创建文件
文件的创建,需要借助java.io.File实例上的createNewFile
方法.该方法返回一个boolean值.true代表创建成功,false代表创建失败
package files;
import java.io.File;
import java.io.IOException;
public class CreateFile {
private final static String FILE_NAME = "yuansudong.txt";
public static void run() {
final File file = new File(CreateFile.FILE_NAME);
if (file.exists()) {
// 如果文件存在,会进入这里.
System.out.println(CreateFile.FILE_NAME + "存在,不执行创建操作");
return;
}
try {
boolean lIsSuccess = file.createNewFile();
if(!lIsSuccess) {
System.out.println("创建文件失败");
return;
}
System.out.println("创建文件成功+"+file.getAbsolutePath());
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
2.删除文件
package files;
import java.io.File;
public class DeleteFile {
private final static String FILE_NAME = "yuansudong.txt";
public static void run() {
File file = new File(FILE_NAME);
if(!file.exists()) {
System.out.println("文件不存在,不执行删除操作");
return;
}
boolean lIsSuccess = file.delete();
if(!lIsSuccess) {
System.out.println("文件删除失败");
return;
}
System.out.println("文件删除成功");
}
}
3.重命名
package files;
import java.io.File;
import java.io.IOException;
public class RenameFile {
private final static String SRC_FILE_NAME = "yuansudong.txt";
private final static String DST_FILE_NAME = "yuansudong_rename.txt";
public static void run() {
File lSrcFile = new File(SRC_FILE_NAME);
File lDstFile = new File(DST_FILE_NAME);
if(!lSrcFile.exists()) {
try {
if( !lSrcFile.createNewFile()) {
System.out.println("源文件创建失败");
}
} catch (IOException e) {
throw new RuntimeException(e);
}
}
if(!lSrcFile.renameTo(lDstFile)){
System.out.println("文件重命名失败");
};
}
}
4.读写数据
package files;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.nio.Buffer;
import java.nio.ByteBuffer;
import java.nio.charset.StandardCharsets;
import java.util.Arrays;
public class RWFile {
private static final String FILE_NAME="yuansudong.txt";
public static void run() throws IOException {
File file = new File(FILE_NAME);
if(!file.exists()) {
try {
if(!file.createNewFile()) {
System.out.println("文件创建失败");
return;
}
} catch (IOException e) {
throw new RuntimeException(e);
}
}
try (FileOutputStream writer = new FileOutputStream(file)) {
String hello = "hello,world";
writer.write(hello.getBytes(StandardCharsets.UTF_8));
} catch (IOException e) {
throw new RuntimeException(e);
}
try (FileInputStream reader = new FileInputStream(file)) {
int fileSize = reader.available();
byte[] buffer = new byte[fileSize];
int length = reader.read(buffer);
if (length != fileSize) {
throw new RuntimeException("长度不等");
}
System.out.println("当前获取到的内容是:" + new String(buffer,StandardCharsets.UTF_8));
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
文件夹
1.创建文件夹
package directory;
import java.io.File;
import strings.Strings;
public class CreateDirectory {
private static final String DIR = Strings.Join("yuansudong", File.separator, "sub1", File.separator, "sub2");
public static void run() {
File file = new File(DIR);
if (file.exists()) {
// 进入这里代表文件存在.
if (file.isFile()) {
System.out.println("该路径是一个文件,不能进行创建文件");
return;
}
System.out.println("该文件夹已经存在");
return;
}
// mkdir -p
if (!file.mkdirs()) {
System.out.println("文件夹创建失败");
return;
}
System.out.println("文件夹创建成功");
}
}
3.删除文件夹
delete方法,目录必须为空.
package directory;
import java.io.File;
import java.util.Arrays;
import java.util.List;
import java.util.concurrent.atomic.AtomicLong;
import strings.Strings;
public class DeleteDirectory {
private final static String mDIR = "yuansudong";
public static long run(String directory) {
if (directory == null) {
directory = mDIR;
}
File file = new File(directory);
if (!file.exists()) {
System.out.println("该文件夹不存在,不能执行删除操作");
return 0;
}
// 用于获取绝对路径
directory = file.getAbsolutePath();
String[] fileList = file.list();
if (fileList == null) {
// 进入这里代表抽象路径不存在.在该段代码中,不会走到这里.因为,前面已经检查过了.
return 0;
}
final AtomicLong totalCount = new AtomicLong();
String finalDirectory = directory;
List<String> firstResult = Arrays.stream(fileList).peek((s) -> {
File normalFile = new File(Strings.Join(finalDirectory, File.separator, s));
if (normalFile.isDirectory()) {
totalCount.addAndGet(DeleteDirectory.run(normalFile.getAbsolutePath()));
return;
}
final boolean lDeleteSuccess = normalFile.delete();
if (lDeleteSuccess) {
totalCount.addAndGet(1);
System.out.println("文件删除成功 => " + normalFile.getAbsolutePath());
}
}).map((e) -> e + e).toList();
if (file.delete()) {
totalCount.addAndGet(1);
System.out.println("目录删除成功");
}
return totalCount.get();
}
}