zl程序教程

您现在的位置是:首页 >  后端

当前栏目

Java面向对象(七)IO编程

JAVA编程IO 面向对象
2023-09-11 14:20:00 时间

File类操作:


Java的集合框架:  类和接口存在于java.util包中.

Java的IO:                类和接口存在于java.io包中.

学习方法:  文档在手,天下我有!


讲IO操作之前,必须要先讲File类(文件/目录).

-----------------------------------------------------------------------------------------

File类介绍和路径分隔符: File类是IO包中唯一表示磁盘文件和磁盘目录的对象的路径.

该类包含了创建,删除文件,重命名文件,判断文件读写权限以及文件是否存在,查询等功能方法. 只能设置和获取文件本身的信息,不能设置和获取文件的内容.

-----------------------------------------------------------------------------------------

Java做开发: 一次编写,到处运行.

Unix:   严格区分大小写.

WIndows: 默认情况下是不区分大小写的.

路径分隔符,属性分隔符:

Unix:          使用”/”,来分割目录路径.          使用 :   来分割属性.

Windows:  使用”\”,来分割目录路径.但是在Java中一个”\”表示转义,在Windows平台的Java代码中表示一个路径,就得使用两个\\. 但是Windows支持/.                                      使用   ; 来分割属性.

File类中提供了两类常量,分别来表示路径分隔符和属性分隔符.

获取File路径和检测状态:

操作File路径和名称:

File getAbsoluteFile() :获取绝对路径

String getAbsolutePath():获取绝对路径

String getPath() :获取文件路径

String getName() :获取文件名称

File getParentFile():获取上级目录文件

String getParent() :获取上级目录路径

检测File状态的方法:

boolean canExecute() :判断是否是可执行文件

boolean canRead() :判断该文件是否可读

boolean canWrite():判断该文件是否可写

boolean isHidden():判断该文件是否是隐藏文件

long lastModified():判断该文件的最后修改时间

long length():获取该文件的长度大小(单位字节)

 

练习:

操作IO流的模板:

1):创建源或者目标对象(挖井).      

拿文件流举例:      

输入操作:    把文件中的数据流向到程序中,此时文件是源,程序是目标.      

输出操作:    把程序中的数据流向到文件中,此时文件是目标,程序是源.

2):创建IO流对象(水管).      

输入操作:     创建输入流对象.      

输出操作:     创建输出流对象.

3):具体的IO操作.      

输入操作:    输入流对象的read方法.      

输出操作:    输出流对象的write方法.

4):关闭资源(勿忘).

一旦资源关闭之后,就不能使用流对象了,否则报错.      

输入操作:    输入流对象.close();      

输出操作:    输出流对象.close().


Notes:

操作IO流的六字箴言:        读进来,写出去.        

读进来:  进来强调了是输入, 读说明是read方法.        

写出去:   出去强调了是输出,写说明是write方法.

 

 

文件流的操作:

FileInputStream:     文件的字节输入流

FileOutputStream:  文件的字节输出流

FileReader:            文件的字符输入流

FileWriter:              文件的字符输出流


附上复制以及输入的练习代码:
 

package copy;

import java.io.File;

public class CopyFile {
	public static void main(String[] args) {
		File sourceFile=null;
		File desFile=null;
		String sourceFolder="D://test";
		String copyFolder="D://copy";
		sourceFile =new File(sourceFolder);
		
		if (!sourceFile.isDirectory()) {
			System.out.println("源文件夹不存在");
		}else {
			desFile =new File(copyFolder);
			desFile.mkdir();
			copy(sourceFile.listFiles(),desFile);
			System.out.println("文件复制成功");
		}
	}

	private static void copy(File[] f1, File file) {
		if (!file.exists()) {
			file.mkdir();
		}
		
		for (int i = 0; i < f1.length; i++) {
			if (f1[i].isFile()) {
				try {
					
				} catch (Exception e) {
					// TODO: handle exception
				}
			}
		}
	}
}

 

package com.input;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;

/**
 * 读取文件内容
 * @author YDLin
 * @date 2020年1月9日2020年1月9日
 * @Description
 */
public class TestInputStream {

	public static void main(String[] args) throws IOException {
		/**读取文件的步骤
		 * 1、根据文件的路径名称先把文件转成流
		 * 2、进行读\写操作
		 * 3、关闭输入\输出流
		 */
		//先创建一个输入流 (InputStream(字节),Reader(字符))
		InputStream input=null;
		StringBuffer sb=new StringBuffer();
		try {
		  input=new FileInputStream("D:\\file.txt");
		  //2、从流中读取数据(每次从流中读取指定长度的字节数,然后保存在字节中转站中)
		  //System.out.println(input.available());
		  byte[] len=new byte[1024];
		  //返回值为-1表示单签没有读取到数据,表示已经读完了
		  while (input.read(len)!=-1) {
			//每读取到的数据都必须处理,从数组中挪走
			  String message=new String(len,"utf-8");
			  sb.append(message);
		}
		  System.out.println(sb.toString());
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally {
			if (input!=null) {
				input.close();
			}
		}
		
	}

}