对文件进行创建,写入数据,阅读数据,删除文件的操作
package pri.lsx.test.file; import java.io.*; /** * 对文件操作 * 1:本文参考https://jingyan.baidu.com/article/154b46316536c428ca8f41f5.html; * 2:本代码创建的是一个txt文件 * * @author lisx * @date 2018-05-04 */ public class FileOperate { public static void main(String[] args) throws IOException { // 创建txt文件 creatFile(); // 文件中写入内容 writFile(); // 读文件中的信息 readFile(); // 删除文件 deleteFile(); } /** * 创建一个文件 */ private static void creatFile() throws IOException { // 指定文件路径创建 File 对象 File theNewFile = new File("D:/NewFileByJava.txt"); // 判断文件是否存在,如果不存在,则尝试创建文件 if (!theNewFile.exists()) { try { // 调用 createNewFile 放创建文件,并返回创建结果 boolean createResult = theNewFile.createNewFile(); if (createResult) { System.out.println("文件创建成功!"); } else { System.out.println("文件创建失败!"); } } catch (IOException e) { e.printStackTrace(); } } } /** * 往文件中写入内容 */ private static void writFile() throws IOException { // 创建一个文件对象,我们刚刚创建这个文件 File theNewFile = new File("D:/NewFileByJava.txt"); // 创建一个文件输出流对象 FileOutputStream fos = new FileOutputStream(theNewFile); // 创建带缓冲区的字符流输出对象,通过这个对象,我们的内容输出效率较高 BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(fos)); // 输出第一行信息 bw.write("第一行信息"); // 输出回车符(\r)换行符(\n) // 对于 Windows系统,我们输出这两个字符后,在文件中就表现为"另起一行" bw.write("\r\n"); bw.write("第二行信息"); // 将缓冲区的内容输出到文件中 bw.flush(); // 关闭输入流对象!!这是最佳实践!! // 任何文件流操作完毕后,必须将流对象关闭!! fos.close(); bw.close(); System.out.println("文件输入完毕!"); } /** * 从文件中读取内容 */ private static void readFile() throws IOException { // 创建一个文件对象,我们刚刚创建这个文件 File theNewFile = new File("D:/NewFileByJava.txt"); // 创建文件输入流对象,注意,这里的输入流和输出流是相对程序而言的! // 从程序中往外输出就是输出流,往程序中读入就是输入流 FileInputStream fis = new FileInputStream(theNewFile); // 创建带缓冲区的字符流输入对象 BufferedReader br = new BufferedReader(new InputStreamReader(fis)); String line = null; // 调用br.readLine(), 逐行读入所有数据,读到文件末尾,返回 null while ((line = br.readLine()) != null) { System.out.println(line); } // 操作完毕,关闭所有流对象 fis.close(); br.close(); } /** * 删除文件 * 1:这个方法同样适用于删除文件夹,在 JAVA 中,一个文件夹也是一个文件,也通过 File 对象来表示! */ private static void deleteFile() { // 创建一个文件对象 File theNewFile = new File("D:/NewFileByJava.txt"); // 调用 delete 方法将自己删除,并返回删除结果 boolean deleteResult = theNewFile.delete(); if (deleteResult) { System.out.println("文件删除成功!"); } else { System.out.println("文件删除失败!"); } } }
执行结果
文件输入完毕! 第一行信息 第二行信息 文件删除成功!
复制文件(使用nio)
package pri.lsx.test.file; import java.io.*; import java.nio.ByteBuffer; import java.nio.channels.FileChannel; /** * 使用NIO对文件进行复制操作 * @author lisx * @date 2018-05-05 */ public class CopyFile { public static void main(String[] args) throws IOException { copy("D:/resourceFileName.txt", "D:/newFileName.txt"); } /** * @param resourceFilePath 被复制的文件路径;aimsFilePath 新文件的路径 */ private static void copy(String resourceFilePath, String newFilePath) throws IOException { // 还是使用io中的方式 FileOutputStream fileOutputStream = new FileOutputStream(newFilePath); FileInputStream fileInputStream = new FileInputStream(resourceFilePath); // 分别生成读与写的文件通道;该方式是nio才有的 FileChannel readChannel = fileInputStream.getChannel(); FileChannel writChannel = fileOutputStream.getChannel(); // 得到缓冲,没次缓存1k的量;该方式是nio才有的 ByteBuffer byteBuffer = ByteBuffer.allocate(1024); while (true) { byteBuffer.clear(); // 每次都使参数初始化 int len = readChannel.read(byteBuffer); if (len == -1) { break; } byteBuffer.flip(); // 读写转换 writChannel.write(byteBuffer); } } }