java-输入输出流--笔记06

本篇文章借鉴于博主 xiaolong18312093514 的 java 输入输出流详解及分类

File类的方法
方 法 原 型 说 明
boolean exists() 判断文件是否存在,存在返回true,否则返回false
boolean isFile() 判断是否为文件,是文件返回true,否则返回false
boolean isDirectory() 判断是否为目录,是目录返回true,否则返回false
String getName() 获得文件的名称
String getAbsolutePath() 获得文件的绝对路径
long length() 获得文件的长度(字节数)
boolean createNewFile() throws IOException 创建新文件,创建成功返回true,否则返回false,有可能抛出IOException异常,必须捕捉
boolean delete() 删除文件,删除成功返回true,否则返回false
File[] listFiles() 返回文件夹内的子文件与子文件夹的数组
// 我只写了部分,想测试的小伙伴可以看上面的方法自行测试哈
@Test
public void method1() {
	String path1 = "E:/图标.ico";
	// File 类可以表示 具体的文件或目录
	File file1 = new File(path1);
	// isFile() 判断是一个文件
	System.out.println(file1.isFile());
	// isDirectory() 判断是一个目录
	System.out.println(file1.isDirectory());
	System.out.println("名称:"+file1.getName());
	System.out.println("是否可读="+ file1.canRead());
	System.out.println("是否可写="+ file1.canWrite());
	System.out.println("是否可执行="+ file1.canExecute());
	System.out.println("文件大小="+file1.length()/1024+"KB");
}
流的分类(输入输出是相对与内存的)

流分为 字符流字节流 :这两个流分别有输入输出流,只是字符流比字节流多了一步缓冲区(可以简单的理解为一块特殊的内存)。

使用字节流InputStream、OutputStream时不用关闭资源也可以把资源输出到文件中(最好关闭)。
使用字符流Reader、Writer时需要关闭资源才可以把数据输出到文件,也可以不用关闭资源,但是需要flush()方法强制写入数据才可以。
详细内容请阅读Java进阶(四十五)java 字节流与字符流的区别

字符流:也是特殊的字节流(就是在字节流的基础上,加上编码,形成的数据流)(纯文本的文件是字符流 .txt .xml .html .properties

  • Reader输入流(下面的是子类)
    • BufferedReader缓冲输入流
    • InputStreamReader输入流
  • Writer输出流(下面的是子类)
    • BufferedWriter缓冲输出流
    • OutputStreamWriter输出流

字节流

  • InputStream输入流
    • FileInputStream输入流
    • BufferedInputStream缓冲输入流
  • OutputStream输出流
    • FileOutputStream输出流
    • BufferedOutputStream缓冲输出流
实战小测试(字节流操作)

将图片复制到另一个文件夹

    @Test
	public void method1() {
		// 为了关闭资源
		InputStream inputStream = null;
		OutputStream outputStream = null;
		// 读取 使用 输入流
		try {
			// 得到了一个文件的输入流
			inputStream = new FileInputStream("E:/图片/6.png");
			// 输出流
			// outputStream = new FileOutputStream("E:/test.png"); // 只能写文件,不能创建文件夹
			// 想要创建文件夹需要判断
			File outFile = new File("E:/test/test.png");
			// 得到写出文件ParentFile
			File parentFile = outFile.getParentFile();
			System.out.println(parentFile);
			// 判断写出文件的ParentFile如果不存在,则创建它
			if(!parentFile.exists()) {
				parentFile.mkdirs();
			}
			outputStream = new FileOutputStream(outFile);
		// 第一种写法(文件可能会增大)
		/*	// 开始读这个文件
			// 从此输入流中读取一个数据字节。如果没有输入可用,则此方法将阻塞
			// 下一个数据字节,如果已到达文件末尾,则返回-1
			int t = -1;
			while((t=inputStream.read()) != -1) {
				// 输出的是数据字节
				//System.out.print(t+"\t");
				// 输入流每读取一个数据字节,则使用输出流写一个字节
				outputStream.write(t);
			}
		*/
		// 第二种写法
			// 定义了一个2048个大小的byte的数组
			byte[] bytes = new byte[2048];
			int len = -1;
			/*
			 * len = inputStream.read(bytes) 每次将文件的字节读入到给定的bytes的数组种
			 * 并且返回这次一共读了多少个字节。如果读了文件的末尾则返回-1
			 */
			while((len = inputStream.read(bytes)) != -1) {
				System.out.println(len);
				// 下行代码的写法会增大文件的大小,因为会将未填满的字节也使用上了
				// outputStream.write(bytes);
				// 下行代码限制了写入的开头结尾,未填满bytes数组,也会结束
				outputStream.write(bytes,0,len);
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally { // 关闭使用的流(后使用完的先关闭)
//			if(outputStream != null) {
//				try {
//					outputStream.close();
//				} catch (IOException e) {
//					e.printStackTrace();
//				}
//			}
//			if(inputStream != null) {
//				try {
//					inputStream.close();
//				} catch (IOException e) {
//					e.printStackTrace();
//				}
//			}
			
			// 简化
			try {
				if(outputStream != null) {
					outputStream.close();
				}
				if(inputStream != null) {
					inputStream.close();
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
			
		}
		
	}	
实战小测试(字符流操作)

将文本中的内容复制粘贴到另一个文件中

	public void method1() {
		File inFile = new File("E:/info.txt");
		File outFile = new File("E:/test.txt");
		Reader reader = null;
		Writer writer = null;
		try {
			// FileReader(文件名)
			// 对文件名指定的文件创建一个读入流
			reader = new FileReader(inFile);
			// FileWriter(文件名)
			// 对文件名指定的文件创建一个写出流
			writer = new FileWriter(outFile);
			char[] chars = new char[1024];
			int len = -1;
			// read()方法读取指定文件中的字符。读取完毕,read()方法返回-1
			while((len = reader.read(chars))!= -1) {
				// write()把文字写入到指定文件
				writer.write(chars,0,len);
			}
			
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}finally {
			try {
				if(writer != null) {
					writer.close();
				}
				if(reader != null) {
					reader.close();
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}

你可能感兴趣的:(java-输入输出流--笔记06)