可能你只想简单的使用,暂时不想了解太多的知识,那么请看这里,了解一下如何读文件,写文件

读文件示例代码

	File file = new File("D:\\test\\t.txt");
//这里的有两条斜杠,其实实际的路径为D:\test\t.txt,多的那一条斜杠是转义用的
InputStreamReader inputStreamReader = new InputStreamReader(new FileInputStream(file), "GBK");
//利用之前的File对象,创建了一个`FileInputStream`对象,之后作为InputStreamReader的构造方法参数传入
//第二个参数是编码,一般使用GBK或者是UTF-8
BufferedReader reader = new BufferedReader(inputStreamReader);
//把InputStreamReader作为参数构造一个BufferedReader
String s;
while((s=reader.readLine())!=null){
System.out.println(s);//循环,将该文件里面的内容全部打印出来
}

写文件示例代码

与上面的类似,解释就不多写啦

	File file = new File("Q:\\t.txt");
OutputStreamWriter outputStreamWriter = new OutputStreamWriter(new FileOutputStream(file), "GBK");
BufferedWriter writer = new BufferedWriter(outputStreamWriter);
writer.write("hello world");
writer.close();//必须要调用close才能成功地将内容写入文件

文件不存在的话会自动生成该文件,但是如果是带有文件夹的话,就得考虑到文件夹不存在的情况

例如:

	File file = new File("Q:\\test\\t.txt");
File temp = file.getParentFile();
if (!temp.exists()) {
temp.mkdirs();//文件夹不存在,则新建一个文件夹
}
OutputStreamWriter outputStreamWriter = new OutputStreamWriter(new FileOutputStream(file), "GBK");
BufferedWriter writer = new BufferedWriter(outputStreamWriter);
writer.write("hello world");
writer.close();

复制文件

这里使用的是字节流,把t.txt复制到Q盘中的MY文件夹中,并改名

	FileInputStream inputStream = new FileInputStream("Q:\\t.txt");
FileOutputStream outputStream = new FileOutputStream("Q:\\MY\\t1.txt");
int c;
//读到尾部则是返回-1
while ((c = inputStream.read()) != -1) {
outputStream.write(c);
}
inputStream.close();
outputStream.close();

PS:这里和之前一样,如果文件夹不存在,就得调用mkdirs方法进行创建文件夹的操作,除了txt文件,其他的文件也是可以这样复制

File类(文件类)

File对象代表磁盘中实际存在的文件和目录

静态属性

File.separator 分隔符 windows操作系统是\,linux操作系统则是/

构造方法

  • File(File parent, String child) 通过给定的父抽象路径名和子路径名字符串创建一个新的File实例
  • File(String pathname) 通过将给定路径名字符串转换成抽象路径名来创建一个新 File 实例。

常用方法

  • public String getName() 返回由此抽象路径名表示的文件或目录的名称。
  • public String getParent() 返回此抽象路径名的父路径名的路径名字符串,如果此路径名没有指定父目录,则返回 null
  • public File getParentFile() 返回此抽象路径名的父路径名的抽象路径名的file对象,如果此路径名没有指定父目录,则返回 null
  • public String getPath() 将此抽象路径名转换为一个路径名字符串
  • public boolean exists() 判断此抽象路径名表示的文件或目录是否存在
  • public boolean isDirectory() 测试此抽象路径名表示的文件是否是一个目录
  • public boolean isFile() 测试此抽象路径名表示的文件是否是一个标准文件。
  • public boolean delete() 删除此抽象路径名表示的文件或目录
  • public boolean mkdirs() 创建此抽象路径名指定的目录,包括创建必需但不存在的父目录。
  • public boolean renameTo(File dest) 重新命名此抽象路径名表示的文件

IO流笔记

主要的还是两种,字节流字符流

所有的文件在硬盘或在传输时都是以字节的方式进行,包括图片等,而字符是只有在内存中才会形成,所以在开发中,字节流使用较为广泛。

字节流

1.InputStream(输入)

  • FileInputStream(主要)
  • ByteArrayInputStream
  • ObjectInputStream
  • PidedinputStream

2.OuputStream(输出)

  • FileOutputStream(主要)
  • ByteArrayOutputStream
  • ObjectOutputStream
  • PidedOutputStream

字符流

1.Reader(输入)

  • FileReader
  • CharArrayReader
  • PipedReader
  • StringReader

2.Writer(输出)

  • FileWriter
  • CharArrayWriter
  • PipedWriter
  • StringWriter

缓冲流

上面字节流和字符流一般不会直接使用,实际上,缓冲流是一个装饰类,可以给字符流和字节流添加缓冲这功能。

BufferReader

BufferWriter

其实这两个也是包括在字符流里面的

使用的时候传入一个Writer或者是Reader对象即可

BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter());
BufferedReader bufferedReader = new BufferedReader(new FileReader());

异常处理笔记

**1. try把reader,writer等对象放在括号内,可以自动关闭输入/输出流,并释放资源(输出流会自动调用close方法) **

如果有多个资源,使用分号隔开

ps: jdk1.7+支持

例如:

try(BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(""))){
...
}catch(Excetion e){
...
}

2. 可以使用|来捕获多个异常

try{
...
}catch(NullPointerException | ArrayIndexOutOfBoundsException e){
//捕获了两个异常
}

使用字节流获取图片

URL url = new URL("http://wx3.sinaimg.cn/large/00689t5lgy1g11hi5nzmtg30m80jghe3.gif");
URLConnection connection=url.openConnection();//打开链接
InputStream inputStream = connection.getInputStream();
BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream);
BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(new FileOutputStream(new File("e:\\wan\\download.gif")));
int c;
byte[] temp = new byte[1024 * 2];//提供个缓冲区
while ((c = bufferedInputStream.read(temp)) != -1) {
bufferedOutputStream.write(temp,0,c);//读多少,写多少
}
bufferedOutputStream.close();
inputStream.close();

使用字节流转字符流获取网页内容

基本如上面代码一样,只是输出的时候需要使用bufferwriter输出

ObjectInputStream和ObjectOutStream

序列化和反序列化

序列化:把内存中的序列对象保存在二进制文件中

反序列化:把二进制文件读取,获得原来的文件

需要类实现序列化接口serializable

标识接口里面没有任何的内容

transient关键字 可以让类的某个属性在序列化的过程中不进行写入

List<Book> books = new ArrayList<>();
for (int i = 0; i < 5; i++) {
Book book = new Book("机战风暴"+i,"乱",56);
books.add(book);
} ObjectOutputStream objectOutputStream = null;
try {
objectOutputStream = new ObjectOutputStream(new FileOutputStream(new File("e:\\out.bin")));
} catch (IOException e) {
e.printStackTrace();
} for (Book book : books) {
objectOutputStream.writeObject(book);
}
objectOutputStream.writeObject(null);//写入一个null,防止之后出现EOFException
objectOutputStream.close(); ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream(new File("e:\\out.bin")));
Object o = null;
try {
while ((o = objectInputStream.readObject()) != null) {
Book book = (Book) o;
System.out.println(book.toString());
}
}
catch (ClassNotFoundException e) {
e.printStackTrace();
} }

Java 学习笔记 IO流与File操作的更多相关文章

  1. java学习笔记——IO流部分

    IO流常用的有:字符流.字节流.缓冲流.序列化.RandomAccessFile类等,以上列出的都是开发中比较常用的. 1.字节流: 字节流包含:FileInputStream/FileOutputS ...

  2. java学习笔记 --- IO流小结

    IO流  |--字节流    |--字节输入流     InputStream      int read():一次读取一个字节      int read(byte[] bys):一次读取一个字节数 ...

  3. java学习笔记--IO流

    第十二章大纲: I/O input/output 输入/输出 一.创建文件,借助File类来实现 file.createNewFile() : 创建文件 file.exists() : 判断文件是否存 ...

  4. java 学习笔记之 流、文件的操作

    ava 学习笔记之 流.文件的操作 对于一些基础的知识,这里不再过多的解释, 简单的文件查询过滤操作 package com.wfu.ch08; import java.io.File; import ...

  5. java学习之IO流(学习之旅,一)

    个人在学习IO流的时候看到如下所示java 流类图结构的时候,我的感想是,这么多··处于蒙的状态. Java流类图结构 这么多,没有分类不好学,那我们就慢慢一口一口的吃,这样每天学习一点就好了,其实很 ...

  6. Java 持久化之 --io流与序列化操作

    1)File类操作文件的属性 1.File类的常用方法 1. 文件的绝对完整路径:getAbsolutePath() 文件名:getName() 文件相对路径:getPath() 文件的上一级目录:g ...

  7. java学习笔记 --- IO(2)

    IO流的分类:  流向:  输入流  读取数据  输出流 写出数据  数据类型: 字节流 字节输入流  读取数据 InputStream 字节输出流  写出数据 OutputStream 字符流 字符 ...

  8. Java学习笔记-IO

    IO(Input Output)流,用来处理设备之间的数据传输 IO IO概述 Java对数据的操作是通过流的方式 Java用于操作流的对象都在IO包中 流按操作数据分为两种:字节流与字符流 流按流向 ...

  9. Java学习之IO流及网络编程

    一.字节 1.1字节输入流(java.io.InputStream) ​ 此抽象类是表示字节输入流的所有类的超类 1.1.1定义了所有子类共性的方法: ​ int read() 从输入流中读取数据的下 ...

随机推荐

  1. python os.walk()方法--遍历当前目录的方法

    前记:有个奇妙的想法并想使用代码实现,发现了一个坑,百度了好久也没发现的"填坑"的文章~~~~~~~~~ 那就由我来填 os.walk()支持相对路径 例如 os.walk(&qu ...

  2. Json----简单介绍

    Json 先分享一个网站http://www.bejson.com/,这个是用来检测Json文件的错误的,Json文件一般不好查找错误. 看懂Json只需要四句话: 对象表示为键值对 数据由逗号分隔 ...

  3. 反爬虫:利用ASP.NET MVC的Filter和缓存(入坑出坑)

    背景介绍: 为了平衡社区成员的贡献和索取,一起帮引入了帮帮币.当用户积分(帮帮点)达到一定数额之后,就会“掉落”一定数量的“帮帮币”.为了增加趣味性,帮帮币“掉落”之后所有用户都可以“捡取”,谁先捡到 ...

  4. .Net深入实战系列—JSON序列化那点事儿

    序 当前主流的序列化JSON字符串主要有两种方式:JavaScriptSerializer及Json.net(Nuget标识:Newtonsoft.Json).JavaScriptSerializer ...

  5. 文末福利丨i春秋互联网安全校园行第1站精彩回顾

    活动背景 为响应国家完善网络安全人才培养体系.推动网络安全教育的号召,i春秋特此发起“互联网安全校园行”系列活动.旨在通过活动和知识普及提升大学生信息安全意识,并通过线下交流.技能分享.安全小活动以及 ...

  6. ASP.NET MVC 中读取项目文件的路径

    MVC中获取某一文件的路径,来进行诸如读取写入等操作. 例:我要读取的文件是新生模板.doc,它在如下位置. 获取它的全路径:string path = HttpContext.Current.Ser ...

  7. [Swift]LeetCode146. LRU缓存机制 | LRU Cache

    Design and implement a data structure for Least Recently Used (LRU) cache. It should support the fol ...

  8. 英语笔记3(git)

    备注 一: Staging Modified Files Let’s change a file that was already tracked. (tracked 表示该文件已经被git管理过,再 ...

  9. Mysql的两种偏移量分页写法

    当一个查询语句偏移量offset很大的时候,如select * from table limit 10000,10 , 先获取到offset的id后,再直接使用limit size来获取数据,效率会有 ...

  10. Spring中的IOC_源码_随笔

    Spring ioc 叫控制反转,也就是把创建Bean的动作交给Spring去完成. spring ioc  流程大致为 定位-> 加载->注册 先说几个比较有意思的点 1.Spring中 ...