- 什么是文件
- 范围很广,在生活可指(公文,书信:文章,政策,资料….)
在程序中指数据的载体(word文档,excel文档.exe文件…)
文件名由:文件名称.后缀名称表示
文件内容:本质数据全部是0与1组成的,根据文件的类型不同计算机解释成相应的内容
如果是文本文件:计算机根据字符编码集映射成汉字展示文件内容
如果是图片文件:计算机根据像素映射映射成一个个色点,然后整体就是图片效果展示
说明
文件名不能用:/:*?<>|组成(因此这些字符在操作系统中都有特殊的用途(搜索符号,表示目录,表示特殊的含义)比如\是用来表示某个目录下:如C:\Windows\System32但是如果你有个目录或者文件中包含\就含义不明确了 准确的说是中文全角状态下是可以用的,因此全角下其ASCII已经完全不一样了 允许文件或者文件夹名称不得超过255个字符 开头的空白字符会被截取掉 文件名与文件类型用.隔开 文件类型 查看文件的后缀名,一定要显示文件的后缀,不要被文件名误导 决定了打开文件的方式(计算机如何正确解释文件中内容的含义) 计算机会根据文件类型选择关联的应用软件打开文件 如果使用软件不具备打开某文件的能力,那么打开后你看不到你想要的内容
- 什么是文件夹
- 装文件的容器,也称为目录或盘符
- 举例
c盘
user文件夹
- 文件的作用
- 长久的存储数据(物理构件是硬盘,硬盘好比整个容器)
- 如何使用文件(学习java对文件的操作)
- 学习哪些API
- java.io包中的File类即可
- File代表的是什么
源码(普通类)
- 文件路径或目录(不是我们理解的文件名或文件这么简单模糊)
路径分类(便于操作)
相对路径:以此时文件所在文件夹路径为起点
绝对路径:以盘符为起点
注意
在java项目中,相对路径的根目录是从项目所在的根文件夹开始的在java项目中,路径表示用:\\或//不能用\ 不能用\ 要用需要转义:可用\\ 或者用/
- File的构造方法(重载5个,公开的有3个,没有无参构造方法)
- 根据一个字符串构造
- 根据两个字符串构造
- 根据一个文件对象和一个字符串构造
- 说明
使用构造方法创建的实例,仅是在内存中有这样一File对象,其中path,prefixLength有值了,硬盘中该文件或目录并不存在 - 图解
- FIle常用的类成员
成员变量(FileSystem,path,prefixLength)
成员方法(相当多,掌握常用的)
增
createNewFile();//根据指定的路径名称创建文件
mkdir();//根据指定的路径名称创建目录
mkdirs();//根据指定的路径名称创建目录,能创建多级目录:如,同时a//b目录
删
delete();//根据路径删除文件或目录
deleteOnExit()//在JVM退出前删除此路径对应的文件或目录
改
renameTo(File newFile)//重命名
setReadableboolean b();//;//用不起
setWritable(boolean b);//设置是否可写:右键文件,属性,常规中可见到read-only被勾选,修改文件后无法保存,只能另存
setExecuteable();//用不起
查
查状态
exists();//路径是否存在
isDictory();//是否是目录
isFile();//是否是文件
canRead();//是否可读
canWrite();//是否可写
canExecute()//能否执行
isHidden();//是否隐藏
isAbsolute();//是否是用的绝对路径
查内容
getName();//获取文件名
getPath();//获取构建的路径
getParent();//返回父级的路径
getParentFile();//获取父级File对象,打印是调用的toString()被重写了:返回getPath内容
length();//文件的字节数,即文件的大小
list();//得到某个目录下的所有文件或目录
listFiles();//得到某个目录下的所有文件
//可以传入filter过滤出符合名称要求的文件或目录
案例:根据指定的过滤器在指定目录下获取所有的符合过滤条件的文件,并存储到list 集合中创建文件或目录的一般步骤
File file = new File("使用相对路径或绝对路径");
先查看创建的File对象是否存在,如果已经有了返回false
如果存在:输出提示"文件或文件夹已存在无法创建"
如果不存在:根据自己需要创建文件或目录
说明
如果没有盘符F你却要在盘符F下创建文件,会抛出IO异常IOException是继承Exception要么try-catch处理要么抛出 createNewFile()方法抛出了IOException 同一个目录不能出现两个同名的文件夹或文件(文件夹和文件也不能同名) 可选方法 createNewFile();//根据指定的路径名称创建文件 mkdir()//根据指定的路径名称创建目录 mkdirs();;//根据指定的路径名称创建目录,能创建多级目录:如,同时a//b目录
- 学习哪些API
- 什么是流
- https://www.cnblogs.com/biehongli/p/6074713.html
- 数据传输的过程就是流
- 分类
- 根据流的方向(相对的概念,一般以程序为参考)
1) 输入流:从目的地到程序中
2) 输出流:数据从程序到目的地 - 根据传输数据的大小(实际上都是按位来传递数据的,01传递的)
1) 字节流:按字节的方式读写数据
2) 字符流:按字符的方式来读写数据
- 根据流的方向(相对的概念,一般以程序为参考)
- 流的作用
- 数据的传输(文件数据的增删改查都需要流操作)
- 流的使用
- 学习哪些API
- 体系结构一张图
1) 体系结构文字说明(有时候图片看上去很过瘾,但是内容太多,还不如几句文字这样才便于记忆)
1) AutoCloseable:顶级接口,自动关闭能力的接口
1) AutoCloseable接口只定义了close()方法:void close() throws Exception
2) jdk1.7新增顶级接口,被打包到java.lang包中
3) 为try语句自动关闭资源的能力提供了支持
1) 作用
不太可能会忘记关闭流
可以使源代码更短,更清晰,更容易维护
2) 语法
try
(
资源实例
)
{
操作代码
}catche(异常对象){
…
}
3) 说明
通过使用分号分隔每个声明可以管理多个资源
在try代码中声明的资源被隐式声明为fianl
4) 举例4) Closeable扩展了AutoCloseable。因此,在JDK7中,所有实现了Closeable接口的类也都实现了AutoCloseable接口
2) Closeable:能关闭能力的接口
1) AutoCloseable接口的子接口
2) 只定义了close()方法,jdk1.5就有了
3) Flushable:清缓存能力的接口
1) 可缓冲区中的数据发送出去,不必等到缓冲区满后发送
4) 输入流:都实现了Closeable接口
1) 字节:InputStream:顶级父类,它是抽象类,实现了Closeable接口,以字节方式操作输入流
常用的成员方法
read([字节数组][,起始下标][,读取长度]);
available();
close();
成员方法图解子类 FileInputStream常用构造函数图解 FilterInputStream:包装InputStream的副本 子类 BufferedInputStream常用构造函数图解 DataInputStream常用构造函数图解 ObjectInputStream:常用构造函数与方法图解 2) 字符:Reader:顶级父类,它抽象类,,实现了Closeable接口,以字符方式操作输入流 常用的成员方法 read(); 常用的成员方法图解 子类 InputStreamReader:常用构造函数与方法图解 子类 FileReader BufferedReader常用构造函数与方法图解
5) 输出流:都实现了Flushable接口(层次结构完全相同,操作相反)
1) 字节:OutputStream
常用成员方法
write(int[,起始下标][,读取长度]);
flush();
close();
成员方法图解子类 FileOutputStream:常用构造函数图解 FilterOutputStream:同FilterInputStream,流向变了 ObjectOutputStream:常用构造函数与方法图解 2) 字符:Writer 常用成员方法 write() append() flush(); close(); 常用成员方法图解 子类(同输入流)
- 常用类,以输入流为例
1) 字节流
a) BufferedInputStream:首选,内容量大时效率高
b) FileInputStream:其次选普通的
c) ObjectInputStream:如果要反序列化(该对象必须实现Serializable接口,来声明其是可以序列化的。否则,不能用对象流读写)
2) 字符流
a) BufferedReader:首选带缓冲的,内容量大时效率高
b) FileReader:其次选普通的
c) InputStreamReader:如果需要指定字符编码方式就只能用这个了 构造实例时的包装顺序,以输入流为例(File实例+InputStream = 所有类的构造参数)
1) File实例是所有流的基础
2) 然后是InputStream实例,由FileInputStream实例化
3) 然后是Reader实例,由InputStreamReader实例化- 输入输出常用方法对比
输入 输出
read() write()
available() flush()
readLine() append();
readObject() newLine()
writeObject();
都有close()方法
- 体系结构一张图
- 说明
- 缓存流是如何提高读写效率的
1) 把要发的数据先放到缓冲区,缓冲区放满以后再一次性发过去,而不是分开一次一次地发 - 不使用flush(),能否保证输出流写出的数据完整
1) 不能:flush():这个是代表刷新缓冲区的意思,没有用flush()这个方法,很多情况下会出现流的另一边读不到数据的问题,特别是在数据特别小的情况下.
2) 一般write()方法后必须跟一个flush()以释放buffer - append()方法与write方法的区别
1) append可以添加null的字符串,输出为"null"而write会抛出空指针异常
2) append不仅可写普通字符串也能写可变字符串,而write只能写普通字符串
- 缓存流是如何提高读写效率的
- 学习哪些API
16.文件及IO流的操作
猜你喜欢
转载自www.cnblogs.com/River111/p/9616592.html
今日推荐
周排行