Java 学习笔记 IO流与File操作

时间:2022-09-13 15:40:55

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

读文件示例代码

	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流笔记

Java 学习笔记 IO流与File操作

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

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

字节流

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流&lpar;学习之旅,一&rpar;

    个人在学习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. dialogfield

    before ax2012: typeof() or extendedtype ax2012: extendedtypestr()

  2. WCF Service部署在IIS上

    环境vs2010,WCF应用程序.如何将WCF部署在IIS上. 第一步:右键点击项目,选择生成部署包. 第二步:在你项目所在的文件目录下找到Package文件夹,这就是我们的部署包所在的地方.在这个p ...

  3. Big Data 應用:第二季&lpar;4~6月&rpar;*地区Game APP 变动分布趋势图

    图表简介: 该示意图表示了*地区第二季内所有Game APP类别的分布情形,经由该图表我们可以快速的了解到在这三个月内,哪类型的APP是很稳定:抑或者哪类型的APP是非常不稳定的. 名词解释: 类别 ...

  4. 【转】Linux中安装Resin

      安装步骤: Ø  安装resin前先要保证安装了JDK,可以用命令查看是否安装了JDK: [root@wxr webapps]# java -versions java version &quot ...

  5. ThreadLocal 线程本地变量 及 源码分析

    ■ ThreadLocal 定义 ThreadLocal通过为每个线程提供一个独立的变量副本解决了变量并发访问的冲突问题 当使用ThreadLocal维护变量时,ThreadLocal为每个使用该变量 ...

  6. dubbo &plus; dubbo-admin 入门级demo

    整个示例中,除了dubbo的服务提供者和消费者是在windows里跑着,其他的所有程序都是在centos中. 1.准备环境 windows中jdk和java ide下载. 在centos中,创建软件安 ...

  7. GoLand配置数据库、远程host以及远程调试

    GoLand配置MySQL数据库: (1)右侧栏 -> Database -> +添加 (2)选择MySQL (3)修改Name -> Comment(可选) (4)选择MySQL版 ...

  8. PAT A1141 PAT Ranking of Institutions (25 分)——排序,结构体初始化

    After each PAT, the PAT Center will announce the ranking of institutions based on their students' pe ...

  9. Java学习--编译器javac

    Java的源程序为.java文件, 编译后生成.class文件(字节码文件); javac(java compiler的简写)是java语言的编译器. Hello.java public class ...

  10. 抽象窗口工具包AWT &lpar;Abstract Window Toolkit&rpar; 是 API为Java 程序提供的建立 图形用户界面

    抽象窗口工具包AWT (Abstract Window Toolkit) 是 API为Java 程序提供的建立 图形用户界面GUI (Graphics User Interface)工具集,AWT可用 ...