Java-Files and Streams 部分的笔记,欢迎斧正!

最近外教讲了File,所以写个笔记记录一下,大多数内容都是以链接的形式水过,不喜勿喷,毕竟咱是出了名的懒.

首先,框架如下:
在这里插入图片描述

1.Files and Stream

①package java.io.*;

②Types of InputStream

  1. An array of bytes
  2. A String object
  3. A file

1.1 Bytes Streams
首先网上都有的知识,给个传送门:
https://blog.csdn.net/Regino/article/details/104744665
然后想看分析源码,讲深一点的移步:
https://blog.csdn.net/ai_bao_zi/article/details/81097898
https://blog.csdn.net/ai_bao_zi/article/details/81110405

个人补充:
1.因为是新手嘛,所以我一开始觉得这句话很诡异:
while((i=fin.read())!=-1)
为什么当时-1的时候结束呢?后来仔细看了下是因为read()读不到东西自动返回-1.
2. byte b[]=s.getBytes();这句话,getBytes()的作用很明显,就是把其他类型,比如s是字符串类型的,转化成字节型。
3. 这个代码很有意思

package First;

import java.io.*;

public class Main
{
	public static void main(String args[]) throws IOException
	{
		FileInputStream in = null;
		FileOutputStream out = null;
		try
		{
			in = new FileInputStream("C:\\Users\\win10\\Desktop\\1.txt");
			out = new FileOutputStream("C:\\Users\\win10\\Desktop\\2.txt");
			int c;
			while ((c = in.read()) != -1)
			{
				out.write(c);
			}
		} finally
		{
			if (in != null)
			{
				in.close();
			}
			if (out != null)
			{
				out.close();
			}
		}
	}
}

1.txt里的数据通过这种方式copy到了2.txt里.

1.2 Character Streams
在这里插入图片描述
首先网上都有的知识,给个传送门:https://blog.csdn.net/Regino/article/details/104744658
然后想看分析源码,讲深一点的移步:
https://blog.csdn.net/ai_bao_zi/article/details/81132776
https://blog.csdn.net/ai_bao_zi/article/details/81167994

个人补充:
1.在写入的时候,不论是哪种写入,如果不做处理,是会把之前写入的内容覆盖和重写掉的.所以我们一般会选择加个true:

package First;
import java.io.*;

public class Main {
    public static void main(String[] args) throws IOException {
        //使用文件名称创建流对象
        FileOutputStream fos = new FileOutputStream("C:\\Users\\win10\\Desktop\\1.txt",true);
        //在后面加个true,就改成续写了,不然会默认为false,是覆盖
        fos.write(97); //写出第1个字节
        fos.write(98); //写出第2个字节
        fos.write(99); //写出第3个字节
        //关闭资源
        fos.close();
    }
}
/*
文件
原有123
现有123abc
*/        

2.未调用 close 方法,数据只是保存到了缓冲区,并未写出到文件中;这点和Bytes Streams 不一样.
3.另外如果要换行就 write("\r\n") 即可,当然还有其他方法,就不说了,另外这是Windows的方法,如果是别的操作系统,是不一样的。可自行百度.

1.3 Standard Streams
在这里插入图片描述
首先网上都有的知识,给个传送门:
https://blog.csdn.net/liuhenghui5201/article/details/8292552
然后想看分析源码,讲深一点的移步:
https://blog.csdn.net/ai_bao_zi/article/details/81133476
https://blog.csdn.net/ai_bao_zi/article/details/81168420

1.4 FILE NAVIGATION AND I/O CLASSES
在这里插入图片描述
1.4.1 File Class
首先网上都有的知识,给个传送门:
https://blog.csdn.net/Regino/article/details/104744672
关于相对路径和绝对路径的问题:
https://www.cnblogs.com/qiuh/archive/2013/04/07/3003711.html
https://www.cnblogs.com/qingxinblog/articles/3279526.html
然后想看分析源码,讲深一点的移步:
https://blog.csdn.net/ai_bao_zi/article/details/81015141
个人补充:
1.e.printStackTrace() ;的知识点
https://blog.csdn.net/ccfxue/article/details/50573022
为什么不建议用
https://baijiahao.baidu.com/s?id=1639733404613101605&wfr=spider&for=pc

1.4.2 Creating Directories
1.mkdir()和mkdirs()和createNewFile();
mkdir()只能创建一层目录,比如E盘里有个文件夹aaa,那我就只能在aaa里建一个文件或者一个文件夹,而且之前的通路必须是有效的,在这里就算aaa必须是有效的,而createNewFile()则更为苛刻,他只能建文件,在建文件前的这个通路必须是已经存在的了,而且也不能建文件夹。
而mkdirs()则不一样,就算之前没有这个通路,也能全部一次性建完,哪怕我没有aaa这个文件夹,他也会把aaa建出来,再把bbb和文件建出来。

import java.io.*;    
public class TestFile {    
    public static void main(String[] args) throws Exception {  
        File f1 = new File("E://aaa//bbb");  
        if (!f1.exists()) {  
            f1.mkdirs();  
        }  
        // f1.mkdirs(); 生成所有目录  
        // f1.mkdir(); 必须aaa目录存在才能生成bbb目录  
  
        File f2 = new File("E://aaa//bbb//c.txt");  
        if (!file.exists()) {  
            // 不能生成目录,只能创建文件,且/aaa/bbb目录必须存在  
            file.createNewFile();  
        }  
    }          
}

2.list()和listFile();
https://blog.csdn.net/weixin_30363981/article/details/95410966

1.5 Buffered IO
网上都有的:
https://blog.csdn.net/Regino/article/details/104744649
源码分析:
https://blog.csdn.net/ai_bao_zi/article/details/81134801
https://blog.csdn.net/ai_bao_zi/article/details/81187688

这部分还好吧,没什么好说的,唯有这个类新增的按行读取的方法是很有用的,要注意

齐活,睡觉!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值