JAVA中的I/O流以及文件操作
2015-04-20 15:08
344 查看
一 JAVA语言中主要通过流来完成IO操作。
流:计算机的输入输出之间流动的数据序列,也是类的对象。java中的流方式就像是建立在数据交换源和目的之间的一条通信路径。
数据源:计算机中的数据源是指可以提供数据的地方,包括键盘,磁盘文件,网络接口等。
输入流:从程序外部传向程序的流。输入流只能从中读数据。
输出流: 从程序传到外部的流。输出流只能向其写入数据。
所谓的输入和输出是以程序为中心的,数据流向程序即输入流,数据从程序中流出即输出流。
二 字节流
字节流是以字节为传输单位的数据读写形式,用于直接读取二进制数据,如图像和声音文件等。
InputStream和OutputStream分别为面向字节的输入流类的父类和输出流类的父类。InputStream和OutputStream都是抽象类。
FileInputStream和FileOutputStream是文件流类,他们是InputStream和OutputStream的子类。
FileInputStream类的一般用法是:先创建一个FileInputStream对象关联到要读取的文件,然后调用read方法读取字节数据到程序中,再进行其他处理。因为read方法是按字节的读入的,所以汉字被读入时会出现乱码。
FileOutputStream类的一般用法是:先创建一个FileOutputStream对象关联到要写入的文件,然后调用write方法将字节数据写到程序中。如果进行写操作的文件不存在,则自动创建该文件,但是如果文件所在的路径也不存在,则运行时会报错。
例如 FileOutputStream fos = new FileOutputStream("D:\\test.txt");是不会报错的,
FileOutputStream fos = new FileOutputStream("D:\\tmp\\test.txt");如果之前在D盘中没有tmp这个文件夹,那么此时运行这条语句会报错。
代码如下
View Code
流:计算机的输入输出之间流动的数据序列,也是类的对象。java中的流方式就像是建立在数据交换源和目的之间的一条通信路径。
数据源:计算机中的数据源是指可以提供数据的地方,包括键盘,磁盘文件,网络接口等。
输入流:从程序外部传向程序的流。输入流只能从中读数据。
输出流: 从程序传到外部的流。输出流只能向其写入数据。
所谓的输入和输出是以程序为中心的,数据流向程序即输入流,数据从程序中流出即输出流。
二 字节流
字节流是以字节为传输单位的数据读写形式,用于直接读取二进制数据,如图像和声音文件等。
InputStream和OutputStream分别为面向字节的输入流类的父类和输出流类的父类。InputStream和OutputStream都是抽象类。
FileInputStream和FileOutputStream是文件流类,他们是InputStream和OutputStream的子类。
FileInputStream类的一般用法是:先创建一个FileInputStream对象关联到要读取的文件,然后调用read方法读取字节数据到程序中,再进行其他处理。因为read方法是按字节的读入的,所以汉字被读入时会出现乱码。
FileOutputStream类的一般用法是:先创建一个FileOutputStream对象关联到要写入的文件,然后调用write方法将字节数据写到程序中。如果进行写操作的文件不存在,则自动创建该文件,但是如果文件所在的路径也不存在,则运行时会报错。
例如 FileOutputStream fos = new FileOutputStream("D:\\test.txt");是不会报错的,
FileOutputStream fos = new FileOutputStream("D:\\tmp\\test.txt");如果之前在D盘中没有tmp这个文件夹,那么此时运行这条语句会报错。
代码如下
package 输入输出流_移动指定目录下的文件; import java.io.File; public class FileDemo_06 { //英东某个指定的文件,但移动成功后不会覆盖已存在的文件 public static boolean moveA_File(String sourceFileName, String targetFileName) { return FileDemo_06.moveA_File(sourceFileName, targetFileName, false); } //移动某个指定的文件,但移动成功后可以根据isOverlay的值来决定是否覆盖已存在的目标文件 public static boolean moveA_File(String sourceFileName, String targetFileName, boolean isOverlay) { File sourceFile = new File(sourceFileName); if (!sourceFile.exists()) { System.out.println("文件" + sourceFileName + "不存在,移动失败"); return false; } else if (!sourceFile.isFile()) { System.out.println(sourceFileName + "不是文件,移动失败"); return false; } File targetFile = new File(targetFileName); if (targetFile.exists()) { if (isOverlay) { System.out.println("目标文件已经存在,准备删除它"); if (!FileDemo_05.deleteFilesOrDir(targetFileName)) { System.out.println("文件移动失败,文件" + targetFileName + "删除失败"); return false; } } else { System.out.println("文件移动失败,因为文件" + targetFileName + "已经存在"); return false; } } else { if (!targetFile.getParentFile().exists()) { System.out.println("文件" + targetFile + "所在的目录不存在,正在创建"); if (!targetFile.getParentFile().mkdirs()) { System.out.println("移动文件失败,因为创建文件坐在的文件夹失败"); return false; } } } //移动源文件至目标文件 if (sourceFile.renameTo(targetFile)) { System.out.println("移动源文件" + sourceFileName + "到" + targetFileName + "成功" ); return true; } else { System.out.println("移动源文件" + sourceFileName + "到" + targetFileName + "失败" ); return false; } } public static boolean moveDir(String sourceDirName, String targetDirName) { //默认为不覆盖目标文件 return FileDemo_06.moveDir(sourceDirName, targetDirName, false); } //移动某个指定的目录,但移动成功后可以根据isOverlay的值来决定是否覆盖当前已存在的目标目录 public static boolean moveDir(String sourceDirName, String targetDirName, boolean isOverlay) { //判断原目录是否存在 File sourceDir = new File(sourceDirName); if (!sourceDir.exists()) { System.out.println("源目录" + sourceDirName + "不存在,移动目录失败"); return false; } else if (!sourceDir.isDirectory()) { System.out.println("移动目录失败," + sourceDirName + "不是目录"); return false; } //如果目标文件名不是以文件分割符结尾,自动添加文件分隔符 if (!targetDirName.endsWith(File.separator)) { targetDirName += File.separator; } File targetDir = new File(targetDirName); //如果目标文件夹存在 if (targetDir.exists()) { if (isOverlay) { //允许删除则删除已存在的目标目录 System.out.println("该目录已经存在,准备删除它"); if (!FileDemo_05.deleteFilesOrDir(targetDirName)) { System.out.println("移动目录失败,因为目标目录已经存在。 删除目录" + targetDirName + "失败!" ); } } else { System.out.println("移动目录失败:该目录" + targetDirName + "已存在!"); return false; } } else { //创建目标目录 System.out.println("该目录不存在,正在创建"); if (!targetDir.mkdirs()) { System.out.println("移动目录失败: 创建目标目录失败"); return false; } } boolean flag = true; //移动原目录下的文件和子目录到目标目录下 File[] files = sourceDir.listFiles(); for (int i = 0; i < files.length; i++) { //移动子文件 if (files[i].isFile()) { flag = FileDemo_06.moveA_File(files[i].getAbsolutePath(), targetDirName + files[i].getName(), isOverlay); if (!flag) { break; } } else if (files[i].isDirectory()) { //移动子目录 flag = FileDemo_06.moveDir(files[i].getAbsolutePath(), targetDirName + files[i].getName(), isOverlay); if (!flag) { break; } } } if (!flag) { System.out.println("目录" + sourceDirName + "移动到" + targetDirName + "失败"); return false; } //删除原目录 if (FileDemo_05.deleteDir(sourceDirName)) { System.out.println("目录" + sourceDirName + "移动到" + targetDirName + "成功"); return true; } else { System.out.println("目录" + sourceDirName + "移动到" + targetDirName + "失败"); return false; } } public static void main(String[] args) { //移动文件,如果目标文件存在,则替换 System.out.println("调用moveA_File方法的结果如下"); String sourceFileName = "D:\\aa\\temp\\key.txt"; String targetFileName = "D:\\bbb\\ddd\\"; FileDemo_06.moveA_File(sourceFileName, targetFileName); //移动目录,如果目标目录存在,则不覆盖 System.out.println("\n调用moveDir方法的结果如下"); String sourceDir = "D:\\aa"; String targetDir = "C:\\mm"; FileDemo_06.moveDir(sourceDir, targetDir,false); } }
View Code
相关文章推荐
- java 的 文件、文件夹 的建立、删除、复制以及移动等功能 操作
- Java知识点之“写文件操作以及复制文件操作”
- Java程序员从笨鸟到菜鸟之(一百零五)java操作office和pdf文件(三)利用jxl实现数据导出excel报表以及与POI的区别
- Java程序员从笨鸟到菜鸟之(一百零五)java操作office和pdf文件(三)利用jxl实现数据导出excel报表以及与POI的区别
- java路径问题以及java对文件的基本操作信息
- Java I/O流操作(三)---File文件操作及打印流和序列流-合并流
- MyEclipse设置JSP页面默认编码方式以及设置在Java文件中作者、日期等操作说明
- java文件操作(普通文件以及配置文件的读写操作)
- java文件操作(普通文件以及配置文件的读写操作)
- Java文件操作2——文件I/O流
- java:File类中对文件或目录进行操作的常用方法以及遍历文件夹下面的文件
- Java 操作MySQL数据库存取图片以及其它类型文件
- 详解Java的文件与目录管理以及输入输出相关操作
- Java对文件的随机读写以及压缩处理操作
- java file to inputstream以及New Document From InputStream读取和写入文件操作实例代码
- Java操作Excel文件以及将xls/xlsx转为csv文件
- java中File文件的创建,删除,复制,移动,以及目录文件的删除等等,主要是文件及文件夹的操作
- 关于java基础--PIO操作xls文件、持久化对象以及拷贝文件
- Java操作文件输出为字符串以及字符串输出为文件
- java操作hdfs,实现文件上传、下载以及查看当前文件夹下所有文件