最近外教讲了File,所以写个笔记记录一下,大多数内容都是以链接的形式水过,不喜勿喷,毕竟咱是出了名的懒.
首先,框架如下:
1.Files and Stream
①package java.io.*;
②Types of InputStream
- An array of bytes
- A String object
- 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
这部分还好吧,没什么好说的,唯有这个类新增的按行读取的方法是很有用的,要注意
齐活,睡觉!