java IO操作 (读写、追加、删除、移动、复制等)
一、多种方式读文件内容。
1、按字节读取文件内容
2、按字符读取文件内容
3、按行读取文件内容
4、随机读取文件内容
1、按字节读取文件内容
2、按字符读取文件内容
3、按行读取文件内容
4、随机读取文件内容
import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.RandomAccessFile; import java.io.Reader; public class ReadFromFile { /** * 以字节为单位读取文件,常用于读二进制文件,如图片、声音、影像等文件。 * @param fileName 文件的名 */ public static void readFileByBytes(String fileName){ File file = new File(fileName); InputStream in = null; try { System.out.println("以字节为单位读取文件内容,一次读一个字节:"); // 一次读一个字节 in = new FileInputStream(file); int tempbyte; while((tempbyte=in.read()) != -1){ System.out.write(tempbyte); } in.close(); } catch (IOException e) { e.printStackTrace(); return; } try { System.out.println("以字节为单位读取文件内容,一次读多个字节:"); //一次读多个字节 byte[] tempbytes = new byte[100]; int byteread = 0; in = new FileInputStream(fileName); ReadFromFile.showAvailableBytes(in); //读入多个字节到字节数组中,byteread为一次读入的字节数 while ((byteread = in.read(tempbytes)) != -1){ System.out.write(tempbytes, 0, byteread); } } catch (Exception e1) { e1.printStackTrace(); } finally { if (in != null){ try { in.close(); } catch (IOException e1) { } } } } /** * 以字符为单位读取文件,常用于读文本,数字等类型的文件 * @param fileName 文件名 */ public static void readFileByChars(String fileName){ File file = new File(fileName); Reader reader = null; try { System.out.println("以字符为单位读取文件内容,一次读一个字节:"); // 一次读一个字符 reader = new InputStreamReader(new FileInputStream(file)); int tempchar; while ((tempchar = reader.read()) != -1){ //对于windows下,/r/n这两个字符在一起时,表示一个换行。 //但如果这两个字符分开显示时,会换两次行。 //因此,屏蔽掉/r,或者屏蔽/n。否则,将会多出很多空行。 if (((char)tempchar) != '/r'){ System.out.print((char)tempchar); } } reader.close(); } catch (Exception e) { e.printStackTrace(); } try { System.out.println("以字符为单位读取文件内容,一次读多个字节:"); //一次读多个字符 char[] tempchars = new char[30]; int charread = 0; reader = new InputStreamReader(new FileInputStream(fileName)); //读入多个字符到字符数组中,charread为一次读取字符数 while ((charread = reader.read(tempchars))!=-1){ //同样屏蔽掉/r不显示 if ((charread == tempchars.length)&&(tempchars[tempchars.length-1] != '/r')){ System.out.print(tempchars); }else{ for (int i=0; i<charread; i++){ if(tempchars[i] == '/r'){ continue; }else{ System.out.print(tempchars[i]); } } } } } catch (Exception e1) { e1.printStackTrace(); }finally { if (reader != null){ try { reader.close(); } catch (IOException e1) { } } } } /** * 以行为单位读取文件,常用于读面向行的格式化文件 * @param fileName 文件名 */ public static void readFileByLines(String fileName){ File file = new File(fileName); BufferedReader reader = null; try { System.out.println("以行为单位读取文件内容,一次读一整行:"); reader = new BufferedReader(new FileReader(file)); String tempString = null; int line = 1; //一次读入一行,直到读入null为文件结束 while ((tempString = reader.readLine()) != null){ //显示行号 System.out.println("line " + line + ": " + tempString); line++; } reader.close(); } catch (IOException e) { e.printStackTrace(); } finally { if (reader != null){ try { reader.close(); } catch (IOException e1) { } } } } /** * 随机读取文件内容 * @param fileName 文件名 */ public static void readFileByRandomAccess(String fileName){ RandomAccessFile randomFile = null; try { System.out.println("随机读取一段文件内容:"); // 打开一个随机访问文件流,按只读方式 randomFile = new RandomAccessFile(fileName, "r"); // 文件长度,字节数 long fileLength = randomFile.length(); // 读文件的起始位置 int beginIndex = (fileLength > 4) ? 4 : 0; //将读文件的开始位置移到beginIndex位置。 randomFile.seek(beginIndex); byte[] bytes = new byte[10]; int byteread = 0; //一次读10个字节,如果文件内容不足10个字节,则读剩下的字节。 //将一次读取的字节数赋给byteread while ((byteread = randomFile.read(bytes)) != -1){ System.out.write(bytes, 0, byteread); } } catch (IOException e){ e.printStackTrace(); } finally { if (randomFile != null){ try { randomFile.close(); } catch (IOException e1) { } } } } /** * 显示输入流中还剩的字节数 * @param in */ private static void showAvailableBytes(InputStream in){ try { System.out.println("当前字节输入流中的字节数为:" + in.available()); } catch (IOException e) { e.printStackTrace(); } } public static void main(String[] args) { String fileName = "C:/temp/newTemp.txt"; ReadFromFile.readFileByBytes(fileName); ReadFromFile.readFileByChars(fileName); ReadFromFile.readFileByLines(fileName); ReadFromFile.readFileByRandomAccess(fileName); } } 二、将内容追加到文件尾部 import java.io.FileWriter; import java.io.IOException; import java.io.RandomAccessFile; /** * 将内容追加到文件尾部 */ public class AppendToFile { /** * A方法追加文件:使用RandomAccessFile * @param fileName 文件名 * @param content 追加的内容 */ public static void appendMethodA(String fileName, String content){ try { // 打开一个随机访问文件流,按读写方式 RandomAccessFile randomFile = new RandomAccessFile(fileName, "rw"); // 文件长度,字节数 long fileLength = randomFile.length(); //将写文件指针移到文件尾。 randomFile.seek(fileLength); randomFile.writeBytes(content); randomFile.close(); } catch (IOException e){ e.printStackTrace(); } } /** * B方法追加文件:使用FileWriter * @param fileName * @param content */ public static void appendMethodB(String fileName, String content){ try { //打开一个写文件器,构造函数中的第二个参数true表示以追加形式写文件 FileWriter writer = new FileWriter(fileName, true); writer.write(content); writer.close(); } catch (IOException e) { e.printStackTrace(); } } public static void main(String[] args) { String fileName = "C:/temp/newTemp.txt"; String content = "new append!"; //按方法A追加文件 AppendToFile.appendMethodA(fileName, content); AppendToFile.appendMethodA(fileName, "append end. /n"); //显示文件内容 ReadFromFile.readFileByLines(fileName); //按方法B追加文件 AppendToFile.appendMethodB(fileName, content); AppendToFile.appendMethodB(fileName, "append end. /n"); //显示文件内容 ReadFromFile.readFileByLines(fileName); } } 三文件的各种操作类 import java.io.*; /** * FileOperate.java * 文件的各种操作 * @author 杨彩 http://blog.sina.com.cn/m/yangcai * 文件操作 1.0 */ public class FileOperate { public FileOperate() { } /** * 新建目录 */ public void newFolder(String folderPath) { try { String filePath = folderPath; filePath = filePath.toString(); File myFilePath = new File(filePath); if(!myFilePath.exists()) { myFilePath.mkdir(); } System.out.println("新建目录操作 成功执行"); } catch(Exception e) { System.out.println("新建目录操作出错"); e.printStackTrace(); } } /** * 新建文件 */ public void newFile(String filePathAndName, String fileContent) { try { String filePath = filePathAndName; filePath = filePath.toString(); File myFilePath = new File(filePath); if (!myFilePath.exists()) { myFilePath.createNewFile(); } FileWriter resultFile = new FileWriter(myFilePath); PrintWriter myFile = new PrintWriter(resultFile); String strContent = fileContent; myFile.println(strContent); resultFile.close(); System.out.println("新建文件操作 成功执行"); } catch (Exception e) { System.out.println("新建目录操作出错"); e.printStackTrace(); } } /** * 删除文件 */ public void delFile(String filePathAndName) { try { String filePath = filePathAndName; filePath = filePath.toString(); File myDelFile = new File(filePath); myDelFile.delete(); System.out.println("删除文件操作 成功执行"); } catch (Exception e) { System.out.println("删除文件操作出错"); e.printStackTrace(); } } /** * 删除文件夹 */ public void delFolder(String folderPath) { try { delAllFile(folderPath); //删除完里面所有内容 String filePath = folderPath; filePath = filePath.toString(); File myFilePath = new File(filePath); if(myFilePath.delete()) { //删除空文件夹 System.out.println("删除文件夹" + folderPath + "操作 成功执行"); } else { System.out.println("删除文件夹" + folderPath + "操作 执行失败"); } } catch (Exception e) { System.out.println("删除文件夹操作出错"); e.printStackTrace(); } } /** * 删除文件夹里面的所有文件 * @param path String 文件夹路径 如 c:/fqf */ public void delAllFile(String path) { File file = new File(path); if(!file.exists()) { return; } if(!file.isDirectory()) { return; } String[] tempList = file.list(); File temp = null; for (int i = 0; i < tempList.length; i++) { if(path.endsWith(File.separator)) { temp = new File(path + tempList[i]); } else { temp = new File(path + File.separator + tempList[i]); } if (temp.isFile()) { temp.delete(); } if (temp.isDirectory()) { //delAllFile(path+"/"+ tempList[i]);//先删除文件夹里面的文件 delFolder(path+ File.separatorChar + tempList[i]);//再删除空文件夹 } } System.out.println("删除文件操作 成功执行"); } /** * 复制单个文件 * @param oldPath String 原文件路径 如:c:/fqf.txt * @param newPath String 复制后路径 如:f:/fqf.txt */ public void copyFile(String oldPath, String newPath) { try { int bytesum = 0; int byteread = 0; File oldfile = new File(oldPath); if (oldfile.exists()) { //文件存在时 InputStream inStream = new FileInputStream(oldPath); //读入原文件 FileOutputStream fs = new FileOutputStream(newPath); byte[] buffer = new byte[1444]; while ( (byteread = inStream.read(buffer)) != -1) { bytesum += byteread; //字节数 文件大小 System.out.println(bytesum); fs.write(buffer, 0, byteread); } inStream.close(); } System.out.println("删除文件夹操作 成功执行"); } catch (Exception e) { System.out.println("复制单个文件操作出错"); e.printStackTrace(); } } /** * 复制整个文件夹内容 * @param oldPath String 原文件路径 如:c:/fqf * @param newPath String 复制后路径 如:f:/fqf/ff */ public void copyFolder(String oldPath, String newPath) { try { (new File(newPath)).mkdirs(); //如果文件夹不存在 则建立新文件夹 File a=new File(oldPath); String[] file=a.list(); File temp=null; for (int i = 0; i < file.length; i++) { if(oldPath.endsWith(File.separator)) { temp=new File(oldPath+file[i]); } else { temp=new File(oldPath+File.separator+file[i]); } if(temp.isFile()) { FileInputStream input = new FileInputStream(temp); FileOutputStream output = new FileOutputStream(newPath + "/" + (temp.getName()).toString()); byte[] b = new byte[1024 * 5]; int len; while ( (len = input.read(b)) != -1) { output.write(b, 0, len); } output.flush(); output.close(); input.close(); } if(temp.isDirectory()) { //如果是子文件夹 copyFolder(oldPath+"/"+file[i],newPath+"/"+file[i]); } } System.out.println("复制文件夹操作 成功执行"); } catch (Exception e) { System.out.println("复制整个文件夹内容操作出错"); e.printStackTrace(); } } /** * 移动文件到指定目录 * @param oldPath String 如:c:/fqf.txt * @param newPath String 如:d:/fqf.txt */ public void moveFile(String oldPath, String newPath) { copyFile(oldPath, newPath); delFile(oldPath); } /** * 移动文件到指定目录 * @param oldPath String 如:c:/fqf.txt * @param newPath String 如:d:/fqf.txt */ public void moveFolder(String oldPath, String newPath) { copyFolder(oldPath, newPath); delFolder(oldPath); } public static void main(String args[]) { String aa,bb; boolean exitnow=false; System.out.println("使用此功能请按[1] 功能一:新建目录"); System.out.println("使用此功能请按[2] 功能二:新建文件"); System.out.println("使用此功能请按[3] 功能三:删除文件"); System.out.println("使用此功能请按[4] 功能四:删除文件夹"); System.out.println("使用此功能请按[5] 功能五:删除文件夹里面的所有文件"); System.out.println("使用此功能请按[6] 功能六:复制文件"); System.out.println("使用此功能请按[7] 功能七:复制文件夹的所有内容"); System.out.println("使用此功能请按[8] 功能八:移动文件到指定目录"); System.out.println("使用此功能请按[9] 功能九:移动文件夹到指定目录"); System.out.println("使用此功能请按[10] 退出程序"); while(!exitnow) { FileOperate fo=new FileOperate(); try { BufferedReader Bin=new BufferedReader(new InputStreamReader(System.in)); String a=Bin.readLine(); int b=Integer.parseInt(a); switch(b) { case 1:System.out.println("你选择了功能一 请输入目录名"); aa=Bin.readLine(); fo.newFolder(aa); break; case 2:System.out.println("你选择了功能二 请输入文件名"); aa=Bin.readLine(); System.out.println("请输入在"+aa+"中的内容"); bb=Bin.readLine(); fo.newFile(aa,bb); break; case 3:System.out.println("你选择了功能三 请输入文件名"); aa=Bin.readLine(); fo.delFile(aa); break; case 4:System.out.println("你选择了功能四 请输入文件名"); aa=Bin.readLine(); fo.delFolder(aa); break; case 5:System.out.println("你选择了功能五 请输入文件名"); aa=Bin.readLine(); fo.delAllFile(aa); break; case 6:System.out.println("你选择了功能六 请输入文件名"); aa=Bin.readLine(); System.out.println("请输入目标文件名"); bb=Bin.readLine(); fo.copyFile(aa,bb); break; case 7:System.out.println("你选择了功能七 请输入源文件名"); aa=Bin.readLine(); System.out.println("请输入目标文件名"); bb=Bin.readLine(); fo.copyFolder(aa,bb); break; case 8:System.out.println("你选择了功能八 请输入源文件名"); aa=Bin.readLine(); System.out.println("请输入目标文件名"); bb=Bin.readLine(); fo.moveFile(aa,bb); break; case 9:System.out.println("你选择了功能九 请输入源文件名"); aa=Bin.readLine(); System.out.println("请输入目标文件名"); bb=Bin.readLine(); fo.moveFolder(aa,bb); break; case 10:exitnow=true; System.out.println("程序结束,请退出"); break; default:System.out.println("输入错误.请输入1-10之间的数"); } System.out.println("请重新选择功能"); } catch(Exception e) { System.out.println("输入错误字符或程序出错"); } } } }
相关推荐
Java中的IO操作是进行文件处理的核心技术之一,涵盖了读写、追加、删除、移动、复制、修改等基本功能。本文将围绕这些操作展开详细解释,重点解析如何使用Java进行文件的读取。 ### 一、Java IO读取文件内容 #### ...
本文将详细介绍Java中进行文件基础操作的方法,包括读取、追加、删除、移动、复制以及修改文件的具体实现。 #### 一、读取文件内容 文件读取是文件操作中最常见的需求之一。Java提供了多种方式来读取文件内容,...
java IO 操作(读写、追加、删除、移动、复制、修改) java IO 操作是 Java 语言中对文件、流、输入/输出操作的统称。下面是 java IO 操作的详细知识点: 一、 java IO 操作的分类 java IO 操作可以分为两大类:...
在这个源码集合中,我们主要关注的是对文件的各种操作,包括读取、写入、追加、删除、移动和复制。 1. **读取文件内容** - **按字节读取**:使用`FileInputStream`,通过`read()`方法逐个字节地读取文件内容。当`...
本篇文章将详细探讨如何使用Java进行文件的读写、追加、删除、移动、复制和修改等常见操作。我们将首先关注文件的读取方法,因为这是给定文件内容的重点。 1. **读取文件内容** Java提供了多种方式来读取文件内容...
Java IO(Input/Output)操作是...以上就是Java IO操作中关于读写、追加、删除、移动和复制的核心知识点。这些基本操作构成了处理文件和数据交换的基础。在实际开发中,根据具体需求,可以选择合适的类和方法进行操作。
Java IO 操作是Java编程中不可或缺的一部分,它涵盖了文件的读写、追加、删除、移动、复制和修改等操作。以下将详细讲解文件读取的几种方式。 1. **按字节读取文件内容** Java 提供了 `FileInputStream` 类来按...
本文将深入探讨Java中的基本文件操作,包括文件的移动、读写以及文本文件的读写。 首先,让我们从文件操作开始。在Java中,我们可以使用`java.io.File`类来创建、删除、重命名或检查文件是否存在。例如,创建一个新...
在Java编程语言中,`FileWriter`类是用于处理文本文件写入操作的关键工具。当以追加方式写入文件时,我们希望在文件现有内容的末尾添加新的数据,而不是覆盖原有的内容。这种功能在日志记录、数据备份或者需要不断...
Java IO 操作是Java编程中不可或缺的一部分,它涵盖了文件的读写、追加、删除、移动和复制等多种功能。在Java中,IO流(Input/Output Stream)是处理输入输出的主要方式,它允许数据从一个源(如硬盘或网络)传输到...
在"Java_IO.rar"这个压缩包中,包含了一个名为"Java_IO操作_(读写、追加、删除、移动、复制、修改).docx"的文档,该文档详细介绍了如何使用Java的IO流进行各种文件操作。以下是对这些操作的详细介绍: 1. **读取...
除了基本的读写,Java还提供了更多高级功能,如文件的复制、移动、删除、重命名等。例如,可以使用`Files.copy()`方法复制文件,`Files.move()`方法移动文件,`file.delete()`方法删除文件,以及`file.renameTo()`...
在这篇总结中,我们将探讨Java IO操作的各个方面,包括File类、RandomAccessFile类、字节流与字符流的基本操作,以及具体实现文件读写的技术细节。 首先,File类在Java IO操作中扮演着重要角色。它提供了关于文件和...
在Java中,文件操作通常涉及到`java.io`包下的类,如`File`、`FileOutputStream`、`OutputStreamWriter`和`BufferedWriter`等。下面将详细解释这些知识点。 1. **File类**: - `File`类是Java中表示文件和目录路径...
- 自Java 7起,引入了NIO.2,提供更高效和更灵活的文件操作,如`Files`类中的静态方法,可以方便地进行文件操作,如复制、移动、删除等。 8. **字符编码**: - 文件读写时需考虑字符编码问题。默认的编码可能不...