前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >java学习---------IO流学习---文件流inputstream outputstream

java学习---------IO流学习---文件流inputstream outputstream

作者头像
wust小吴
发布2019-07-05 11:03:07
7460
发布2019-07-05 11:03:07
举报
文章被收录于专栏:风吹杨柳风吹杨柳

文件流有很多类

FileInputStream FileoutputStream FileReader FileWriter

BufferedInputStream BufferedOutputSteam BufferReader BufferWriter 缓冲流  它们用来加快读取时间的,

然后直接看代码了:

第一个知识点是文件的创建和目录的创建:

代码语言:javascript
复制
/*
 * File:既可以表示文件(.txt,doc,ppt,mp3,...)也可以表示文件目录(即文件夹),与平台无关
 * File 能新建、删除、重命名文件和目录,但 File 不能访问文件内容本身。
 * 路径:相对路径 % 绝对路径
 */
代码语言:javascript
复制
	@Test
	public void test2() throws IOException{
		//采用字符串的形式,如果文件目录不存在,先执行文件的目录创建,再执行文件的创建
		String filename = "G:\\test\\io2\\IO.txt";
		File file = new File("G:\\test\\io2\\IO.txt");
		boolean b = file.exists();
		System.out.println(b);
		if(!file.exists()){//如果文件不存在的话,那么需要去创建
			//boolean b1 = file.createNewFile();//直接执行代码,肯定有系统找不到指定路径的异常抛出
			boolean b1 =new File(filename.substring(0, filename.lastIndexOf("\\"))).mkdirs();//创建目录
			if(b1){
				boolean b2 = file.createNewFile();//创建文件
				System.out.println(b2);
			}
			
		}
	}

这里我们需要知道目录创建和文件的创建有什么不同:

函数介绍:

目录操作相关 mkDir()只能创建一级目录 mkDirs()可以创建多级目录 list() listFiles()

文件操作相关 createNewFile() 创建文件的, delete() 删除文件的

测试代码:

运行看看就知道是什么样子的,

代码语言:javascript
复制
	@Test
	public void test1() throws IOException{
		//File file = new File("helloworld.txt");
		File file = new File("G:\\test\\io\\hellowordl.txt");
		
		boolean b = file.exists();
		System.out.println(b);
		if(!file.exists()){
			//boolean b1 = file.createNewFile();//直接执行代码,肯定有系统找不到指定路径的异常抛出
			boolean b1 = file.mkdirs();//创建目录
			System.out.println(b1);
		}
		
		//System.out.println("!"+file.delete());
		
		File file1 = new File("file");
		System.out.println(file1.exists());
		
		if(!file1.exists()){
			boolean b2 = file1.mkdir();//默认路径是user.dir,也就是当前项目的路径下面
			System.out.println("@"+b2);
		}
	}

上面的代码来自尚硅谷课程代码 大家自己可以去下载

二 输入流的测试:

代码语言:javascript
复制
	/**
	 * 测试输入流,也就是从外部存储设备中读取数据到程序的内存中,称作输入操作
	 * @throws Exception 
	 */
	@Test
	public void testFileInputStream() throws Exception{
		//首先需要一个文件,可以放到参数里面
		File file = new File("file/iotest.txt");
		//接下来需要申明一个输入流操作,注意是文件输入流,它是基类InputStream的子类
		FileInputStream in = new FileInputStream(file);//存在文件没有找到的异常
		//接下来需要从输入流中把内容数据读出来,
		char temp ;//临时保存内容
		if((in.read())!=-1){
			temp =(char) in.read();//这种读法是每个字符每个字符的读取,而且这里读取的是第二个字符了,因为上面的if语句里面已经读取了一个字符了
			System.out.println(temp);
		}
	}

上面的函数使用的是read(),它只能一个字符一个字符的读,

代码语言:javascript
复制
	@Test
	public void testFileInputStream() throws Exception{
		//首先需要一个文件,可以放到参数里面
		File file = new File("file/iotest.txt");
		//接下来需要申明一个输入流操作,注意是文件输入流,它是基类InputStream的子类
		FileInputStream in = new FileInputStream(file);//存在文件没有找到的异常
		//接下来需要从输入流中把内容数据读出来,
		int i ;//临时保存内容
		while((i=in.read())!=-1){
			char temp =(char)i;//这种读法是每个字符每个字符的读取,而且这里读取的是第二个字符了,因为上面的if语句里面已经读取了一个字符了
			System.out.print(temp);
		}
	}

输出结果:就是文件里面所有的字符

最后一定要加上这一句:in.close();

这里我把它单独写出来,是因为显眼些:原因是

程序中打开的文件流io资源不属于内存里的资源,java垃圾回收机制无法回收该资源,所以需要显是关闭文件的io流

比较标准的写法:

代码语言:javascript
复制
	public void testFileInputStream1() {
		// 1.创建一个File的对象
		File file = new File("file/iotest.txt");
		// 2.将此File类的对象作为形参传递给InputStream的实现类FileInputStream的构造器中
		FileInputStream fis = null;
		try {
			fis = new FileInputStream(file);
			// 3.通过调用流的read()方法将文件中的内容读入
			int i;
			while ((i = fis.read()) != -1) {
				System.out.print((char) i);
			}
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				// 4.关闭现有的流
				if (fis != null) {
					fis.close();
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}

三 测试输出流,也就是写操作:将内存中的数据输出到外部设备中,比如磁盘,光盘,等

代码语言:javascript
复制
	// 测试输出流:将程序的内存数据输出到外部设备上,简称写操作
	@Test
	public void testFileOutputStream() {
		File file = new File("file/outputstream.txt");
		FileOutputStream fos = null;
		try {
			fos = new FileOutputStream(file);
			byte[] b = "now is outputstream test!".getBytes();//将一个字符串转换成byte数组
			fos.write(b);

		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			if (fos != null) {
				try {
					fos.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
	}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2015年03月29日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档