Java基础——IO流

IO流
1.java.io.File
  1.凡是与输入输出相关的类、接口都定义在java.io下
  2.File是一个类,可以由构造器创建其对象。此对象对应着一个文件(.txt .avi .ppt .doc .mp3 .jpg)或文件目录
  3.File类对象是与平台无关的(Java的跨平台特性)
  4.File中的方法,仅涉及到如何创建,删除,重命名等(表面功夫),只要涉及到文件内容的,File是无能为力的,必须由io流来完成
  5.File类的对象常常作为io流的具体类的构造器的形参

  访问文件名:
    getName()
    getPath()
    getAbsoluteFile()
    getAbsolutePath()
    getParent()
    renameTo(File newName)//重命名
      boolean b = file1.renameTo(file2);//要求1.file1文件存在,file2文件不存在。2.file1 file2 类型相同(文件或文件目录)

  文件检测
    exists()
    canWrite()
    canRead()
    isFile()
    isDirectory()

  获取常规文件信息
    lastModified()
    length()

  文件操作相关
    createNewFile()
    delete()

  目录操作相关
    mkDir() //创建一个文件目录,只有在上层文件目录存在的情况下,才返回true
    mkDirs()//创建一个文件目录,若上层文件目录不存在,一并创建
    list() //返回当前文件夹下的内容,是String[]形式的 String[] str = file1.list();
    listFiles()//返回当前文件夹下的内容,是File[]形式的,可以继续后面对文件的操作 File[] files = file1.listFiles();

IO流
  1.流的分类
    按操作数据单位不同分为:字节流(8 bit),字符流(16 bit)(处理的文本文件)
    按数据流的流向不同分为:输入流,输出流
    按流的角色的不同分为:节点流(直接作用于文件的),处理流

  2.IO的体系:
    抽象基类     结点流(文件流)     缓冲流(处理流的一种)
    InputStream   FileInputStream       BufferedInputStream
    OutputStream   FileOutputStream       BufferedOutputStream
    Reader     FileReader          BufferedReader
    Writer       FileWriter             BufferedWriter
 
  对于非文本文件(视频,图片,音频),只能使用字节流实现文件的复制FileInputStream、FileOutputStream
  对于文本文件,还可以只用字符流FileReader、FileWriter

FileReader、FileWriter
在使用时,只是在读取那里char[] c = new char[20];其他地方与 FileInputStream、 FileOutputStream差不多

@Test
	public void testInputFileStream1() {
		//2.创建一个FileInputStream类的对象
		FileInputStream fis = null;
		try {
			//1.创建一个File类的对象
			File file = new File("tests.txt");
			fis = new FileInputStream(file);
			//3.调用FileInputStream的方法,实现file文件的读取
			/*public int read(byte[] b)
			 *读取文件的一个字节,当执行到文件结尾时,返回-1
			 */
			byte[] b = new byte[5];
			int len;
			while((len = fis.read(b)) != -1) {
				String str = new String(b, 0, len);//注意不是b.length,否则最后一步没有覆盖完的字符也会输出出来
				System.out.print(str);
			}
		}  catch (IOException e) {
			e.printStackTrace();
		}finally {
			try {
				//4.关闭相应的流
				fis.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}

	}

	//使用try-catch方式处理异常更合理:保证流关闭操作一定可以执行
	@Test
	public void testInputFileStream() {
		//2.创建一个FileInputStream类的对象
		FileInputStream fis = null;
		try {
			//1.创建一个File类的对象
			File file = new File("tests.txt");
			fis = new FileInputStream(file);
			//3.调用FileInputStream的方法,实现file文件的读取
			/*
			 *read():读取文件的一个字节,当执行到文件结尾时,返回-1
			 */
			int b;
			while((b = fis.read()) != -1) {
				System.out.print((char)b);
			}
		}  catch (IOException e) {
			e.printStackTrace();
		}finally {
			try {
				//4.关闭相应的流
				fis.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}

	}

  

@Test
	public void testFileOutputStream() {
		//1.创建一个File对象,指明要写入的文件位置
		//输出的物理文件可以不存在,当执行过程中,若不存在,会自动创建。若存在,会将原有的文件覆盖
		File file = new File("Love.txt");
		//2.创建一个FileOutputStream类的对象,将file的对象作为形参传递给FileOutputStream	的构造器中
		FileOutputStream fos = null;
		try {
			fos = new FileOutputStream(file);
			//3.调用FileOutputStream的方法,进行写入操作
			//fos.write("I love China!");
			fos.write(new String("I love you! I love China").getBytes());
		}catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally {
			if(fos != null) {
				try {
					//4.关闭对应的文件
					fos.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}

		}

	}

  

//从硬盘读取一个文件,并写入到另一个位置(相当于复制)
	@Test
	public void testCopyFile() {

		long start = System.currentTimeMillis();
		String src = new String("C:\\Users\\hasee\\Desktop\\QQ截图20171106155140.png");
		String dest = new String("C:\\Users\\hasee\\Desktop\\4.jpg");
		copyFile(src, dest);
		long end = System.currentTimeMillis();
		System.out.println("花费的时间为: " + (end - start));
	}

	public void copyFile(String src, String dest){
//		File file1 = new File("Love");//注意后缀,有和没有是不同的
//		File file2 = new File("Love2.txt");
		//File file1 = new File("C:\\Users\\hasee\\Desktop\\QQ截图20171107180120.png");//注意后缀,有和没有是不同的
		File file1 = new File(src);
		File file2 = new File(dest);//两种格式都可以复制过来

		FileInputStream fis = null;
		FileOutputStream fos = null;
		try {
			fis = new FileInputStream(file1);
			fos = new FileOutputStream(file2);

			byte[] b = new byte[5];
			int len;
			while((len = fis.read(b)) != -1) {
				//fos.write(b);错误的写法两种:fos.write(b, 0, b.length);
				fos.write(b, 0, len);
			}
		}catch(Exception e){
			e.printStackTrace();
		} finally {
			if(fos != null) {
				try {
					fos.close();
				}catch(IOException e) {
					e.printStackTrace();
				}finally {
					if(fis != null) {
						try {
							fis.close();
						}catch(IOException e) {
							e.printStackTrace();
						}
					}
				}
			}
		}
	}

  

时间: 2024-11-15 13:28:17

Java基础——IO流的相关文章

黑马程序员——Java基础--IO流(一)---字符流和字节流

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 一.IO流的介绍及体系 IO流用来处理设备之间的数据传输.java对数据的操作是通过流的方式.java用于操作流的对象都在IO包中. 输入流和输出流相对于内存设备而言:将外设中的数据读取到内存中:输入.将内存中的数据写出到外设中:输出. 流按照操作数据分为两种:字节流和字符流. 字符流的由来:其实就是字节流读取文字字节数据后,不直接操作而是先查指定的编码表,获取对应的文字,再对这个文字进行操作

Java基础IO流(一)

IO概念: 大多数应用程序都需要实现与设备之间的数据传输,例如键盘可以输入数据,显示器可以显示程序的运行结果等.在Java中,将这种通过不同输入输出设备(键盘,内存,显示器,网络等)之间的数据传输抽象表述为"流",程序允许通过流的方式与输入输出设备进行数据传输.Java中的"流"都位于java.io包中,成为IO(输入输出)流. IO分类: IO流有很多种,按照操作数据的不同,可以分为字节流和字符流,按照数据传输方向的不同又可以分为输入流和输出流,程序从输入流中读取

Java 基础 IO流(转换流,缓冲)

一,前言 在学习字符流(FileReader.FileWriter)的时候,其中说如果需要指定编码和缓冲区大小时,可以在字节流的基础上,构造一个InputStreamReader或者OutputStreamWriter,这又是什么意思呢 二,转换流 2.1 OutputStreamWriter类 查阅OutputStreamWriter的API介绍,OutputStreamWriter 是字符流通向字节流的桥梁:可使用指定的字符编码表,将要写入流中的字符编码成字节.它的作用的就是,将字符串按照指

Java基础-IO流

简单的使用IO流是很简单的~ package com.j2se.d59.demo; import java.io.*; //IO里的对象来自于java.io.*; //IO流的输入输出是相对于内存RAM的 //分类:单位[字节流.字符流]or方向[输入流.输出流]or功能[节点流.处理流] //所有的IO流由四个抽象类扩展而来: //InputStream 的子类 FileInputStream BufferedInputStream //OutputStream 的子类FileInputStr

黑马程序员——Java基础——IO流

第一讲 IO概述 1概述:IO流:输入(Input与Output流) 2特点: a.IO流用于数据传输: b.按操作分为字节流与字符流 c.按流向分:输入流和输出流 3.常用IO流的基类 1)字节流的基类:InputStream和OutpuStream 2)字符流的基类:Reader和Writer 第二讲 字符流 一.简述 1.字符流的对象融合了编码表.使用的是默认的编码 2.字符流只能用于文字处理,而字节流可以处理其他: 3.下列把FileWriter和FileReader一起讲 1 pack

黑马程序猿——JAVA基础——IO流

----------android培训.java培训.java学习型技术博客.期待与您交流!------------ 一. 一.IO流的三种分类方式 1.按流的方向分为:输入流和输出流 2.按流的数据单位不同分为:字节流和字符流 3.按流的功能不同分为:节点流和处理流     二.IO流的四大抽象类: 字符流:Reader Writer 字节流:InputStream(读数据) OutputStream(写数据)     三.InputStream的基本方法 int read() throws

JAVA基础-IO流(一)

一.IO流 IO流是Java为方便我们对文件的读写进行操作而提供的一种技术.按照读取写入文件的方式不同可以分为字符流和字节流,而每个流派按照功能又分为读和写.字符流读写操作的根类为Reader和Writer,其实现的常用子类分别为.写:PrintWriter.FileWriter.BufferedWriter.OutputStreamWriter(这个为转换流后边会详细说).读:BufferedReader.InputStreamReader(转换流). FileReader. 二.Reader

Java基础-IO流(123

IO流用来处理设备之间的数据传输.可以实现文件复制,上传文件和下载文件. IO流分类 IO流可以吧数据存储到文件,也可以从文件中读取数据 输出流(写数据用) FileWriter void write(String str) //写一个字符串数据 void write(String str,int index,int len) //写一个字符串中的一部分数据 void write(int ch) //写一个字符数据,写int类型好处是既可以写char类型的数据,也可以写插入对应的int类型数据

黑马程序员——java基础IO流——字符流缓冲区和字节流

字符流的缓冲区 l  缓冲区的出现提高了对数据的读写效率. l  对应类 ?    BufferedWriter ?    BufferedReader l  缓冲区要结合流才可以使用. l  在流的基础上对流的功能进行了增强. 1, BufferedWriter 每次可以写入一行,缓冲区的出现是为了提高流的操作效率而出现的.所以在创建缓冲区之前,必须要先有流对象.该缓冲区中提供了一个跨平台的换行符,newLine(); /* 缓冲区的出现是为了提高流的操作效率而出现的. 所以在创建缓冲区之前,