1.File类

File类可以在程序中 操作文件和目录。File类是通过建立File类对象,在调用File类的对象来进行相关操作的。

示例:

  1. public class Demo01 {
  2. public static void main(String[] args) {
  3. File f = new File("f:/我的歌声里.txt");
  4. //访问文件名相关
  5. String name = f.getName();
  6. System.out.println("文件名:" + name);
  7. String absolutePath = f.getAbsolutePath();
  8. System.out.println("绝对路径:" + absolutePath);
  9. String parent = f.getParent();
  10. System.out.println("父目录:" + parent);
  11. //检测相关
  12. System.out.println("是否存在:" + f.exists());
  13. System.out.println("是否可读" + f.canRead());
  14. System.out.println("是否可写:" + f.canWrite());
  15. //获取文件信息
  16. System.out.println("文件的大小: " + f.length());
  17. //以当前路径创建File对象
  18. File file = new File(".");
  19. String[] list = file.list();
  20. //遍历目录下的文件
  21. System.out.println();
  22. System.out.println("当前目录下有文件:");
  23. for(String name1:list){
  24. System.out.println(name1);
  25. }
  26. }
  27. }
public class Demo01 {
public static void main(String[] args) {
File f = new File("f:/我的歌声里.txt");
//访问文件名相关
String name = f.getName();
System.out.println("文件名:" + name);
String absolutePath = f.getAbsolutePath();
System.out.println("绝对路径:" + absolutePath);
String parent = f.getParent();
System.out.println("父目录:" + parent); //检测相关
System.out.println("是否存在:" + f.exists());
System.out.println("是否可读" + f.canRead());
System.out.println("是否可写:" + f.canWrite()); //获取文件信息
System.out.println("文件的大小: " + f.length()); //以当前路径创建File对象
File file = new File(".");
String[] list = file.list();
//遍历目录下的文件
System.out.println();
System.out.println("当前目录下有文件:");
for(String name1:list){
System.out.println(name1);
} }

}

运行结果:

2.IO流的分类

按照方向:输入流和输出流

按照流的大小:字节流和字符流

按照流的角色:节点流和处理流

流的类关系图如下:

3.字节流和字符流

字节流:FileInputStream 和 FileOutputStream

示例:把文件复制成另外的文件

  1. public class Demo02 {
  2. public static void main(String[] args) throws IOException {
  3. /*
  4. * 需求把文件“我的歌声里.txt” 复制并改文件名为 “我的歌声里.java”
  5. *
  6. */
  7. //创建输入流
  8. InputStream is = new FileInputStream(new File("f:/我的歌声里.txt"));
  9. //创建输出流
  10. OutputStream os = new FileOutputStream(new File("f:/我的歌声里.java"));
  11. //创建接收字节数组
  12. byte[] bytes = new byte[1024];
  13. int len = 0;
  14. //循环输入输出
  15. while((len = is.read(bytes)) != -1 ){
  16. os.write(bytes, 0, len);
  17. }
  18. //关闭资源
  19. os.close();
  20. is.close();
  21. }
  22. }
public class Demo02 {
public static void main(String[] args) throws IOException {
/*
* 需求把文件“我的歌声里.txt” 复制并改文件名为 “我的歌声里.java”
*
*/
//创建输入流
InputStream is = new FileInputStream(new File("f:/我的歌声里.txt"));
//创建输出流
OutputStream os = new FileOutputStream(new File("f:/我的歌声里.java"));
//创建接收字节数组
byte[] bytes = new byte[1024];
int len = 0;
//循环输入输出
while((len = is.read(bytes)) != -1 ){
os.write(bytes, 0, len);
}
//关闭资源
os.close();
is.close(); }

}

运行结果:

字符流:FileReader和FileWriter

示例:切割文件

  1. public class Demo03 {
  2. public static void main(String[] args) {
  3. FileReader r = null;
  4. FileWriter w = null;
  5. try {
  6. int count = 0;//定义一个标记
  7. int flag = 0;//文件名标记
  8. r = new FileReader("f:/我的歌声里.txt");
  9. w = new FileWriter("f:/我的歌声里" + flag +".txt");
  10. char[] chars = new char[10];
  11. int len = 0;
  12. while((len = r.read(chars)) != -1){
  13. System.out.println(new String(chars, 0, len));
  14. w.write(chars, 0, len);
  15. w.flush();
  16. count++;
  17. //定义切割的条件
  18. if(count >10 ){
  19. flag++;
  20. w = new FileWriter("f:/我的歌声里" + flag +".txt");
  21. count = 0;
  22. }
  23. }
  24. } catch (FileNotFoundException e) {
  25. e.printStackTrace();
  26. } catch (IOException e) {
  27. // TODO Auto-generated catch block
  28. e.printStackTrace();
  29. }finally{
  30. try {
  31. w.close();
  32. r.close();
  33. } catch (IOException e) {
  34. // TODO Auto-generated catch block
  35. e.printStackTrace();
  36. }
  37. }
  38. }
  39. }
public class Demo03 {
public static void main(String[] args) {
FileReader r = null;
FileWriter w = null;
try {
int count = 0;//定义一个标记
int flag = 0;//文件名标记
r = new FileReader("f:/我的歌声里.txt");
w = new FileWriter("f:/我的歌声里" + flag +".txt");
char[] chars = new char[10];
int len = 0;
while((len = r.read(chars)) != -1){
System.out.println(new String(chars, 0, len));
w.write(chars, 0, len);
w.flush();
count++;
//定义切割的条件
if(count >10 ){
flag++;
w = new FileWriter("f:/我的歌声里" + flag +".txt");
count = 0;
}
		}

	} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try {
w.close();
r.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} } }

}

运行结果

4.转换流

转换流:把字节流转换为字符流,一次来实现性能优化

InputStreamReader 和 OutputStreamWriter

示例:

  1. public class Demo04 {
  2. /**
  3. * @param args
  4. * @throws IOException
  5. */
  6. public static void main(String[] args) throws IOException {
  7. //键盘输入到文件
  8. InputStreamReader isr = new InputStreamReader(System.in);
  9. char[] chars = new char[1024];
  10. int len = 0;
  11. OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("f:/我的文件.txt"));
  12. int count = 0;
  13. while((len = isr.read(chars)) != -1){
  14. osw.write(chars, 0, len);
  15. osw.flush();
  16. count++;
  17. if(count == 10){
  18. break;
  19. }
  20. }
  21. isr.close();
  22. osw.close();
  23. }
  24. }
public class Demo04 {
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
//键盘输入到文件
InputStreamReader isr = new InputStreamReader(System.in);
char[] chars = new char[1024];
int len = 0;
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("f:/我的文件.txt"));
int count = 0;
while((len = isr.read(chars)) != -1){
osw.write(chars, 0, len);
osw.flush();
count++;
if(count == 10){
break; }
}
isr.close();
osw.close(); }

}

运行结果:

5.缓冲流

把流读到缓冲区,然后再一次读到内存中来,以此来提高性能

BuffererInputStream 和BufferedOutputStream

BufferedReader 和 BufferedWriter

示例:

  1. public static void main(String[] args) throws IOException {
  2. //读取并复制保存图片
  3. BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("f:/qq.jpg")));
  4. BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("f:/qqq.png")));
  5. String line = null;
  6. while((line = br.readLine()) != null){
  7. bw.write(line);
  8. bw.flush();
  9. }
  10. bw.close();
  11. br.close();
  12. }
public static void main(String[] args) throws IOException {
	//读取并复制保存图片
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("f:/qq.jpg")));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("f:/qqq.png"))); String line = null;
while((line = br.readLine()) != null){
bw.write(line);
bw.flush();
} bw.close();
br.close(); }</pre>

运行结果:

6.对象序列化

对象流:ObjectInStream和 ObjectOutputStream

Serialiazable关键字:标记接口可序列化

transient关键字:标记瞬态实例变量

示例:

  1. public class Demo06 {
  2. /**
  3. * @param args
  4. * @throws IOException
  5. * @throws FileNotFoundException
  6. * @throws ClassNotFoundException
  7. */
  8. public static void main(String[] args) throws FileNotFoundException, IOException, ClassNotFoundException {
  9. Student s1 = new Student("小红", 19);
  10. Student s2 = new Student("小白", 18);
  11. ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("f:/序列化.txt"));
  12. oos.writeObject(s1);
  13. oos.writeObject(s2);
  14. s2.setName("小白白");
  15. oos.writeObject(s2);//更改变量的属性,即使重新序列化也不会改变原属性值
  16. oos.close();
  17. ObjectInputStream ois = new ObjectInputStream(new FileInputStream("f:/序列化.txt"));
  18. Student rs1 = (Student) ois.readObject();
  19. Student rs2 = (Student) ois.readObject();
  20. System.out.println(rs1);
  21. System.out.println(rs2);
  22. }
  23. }
  24. class Student implements Serializable{
  25. private String name;//学生姓名
  26. private transient int age;//年龄设置为瞬时变量,将不被序列化
  27. public Student(String name, int age) {
  28. super();
  29. this.name = name;
  30. this.age = age;
  31. }
  32. public String getName() {
  33. return name;
  34. }
  35. public void setName(String name) {
  36. this.name = name;
  37. }
  38. public int getAge() {
  39. return age;
  40. }
  41. public void setAge(int age) {
  42. this.age = age;
  43. }
  44. @Override
  45. public String toString() {
  46. return "该学生的名字为:" + name + ",年龄为:" + age;
  47. }
  48. }
public class Demo06 {
/**
* @param args
* @throws IOException
* @throws FileNotFoundException
* @throws ClassNotFoundException
*/
public static void main(String[] args) throws FileNotFoundException, IOException, ClassNotFoundException {
Student s1 = new Student("小红", 19);
Student s2 = new Student("小白", 18); ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("f:/序列化.txt"));
oos.writeObject(s1);
oos.writeObject(s2); s2.setName("小白白");
oos.writeObject(s2);//更改变量的属性,即使重新序列化也不会改变原属性值
oos.close(); ObjectInputStream ois = new ObjectInputStream(new FileInputStream("f:/序列化.txt"));
Student rs1 = (Student) ois.readObject();
Student rs2 = (Student) ois.readObject();
System.out.println(rs1);
System.out.println(rs2); }

}

class Student implements Serializable{

private String name;//学生姓名
private transient int age;//年龄设置为瞬时变量,将不被序列化 public Student(String name, int age) {
super();
this.name = name;
this.age = age;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
}

@Override

public String toString() {

return "该学生的名字为:" + name + ",年龄为:" + age;

}

}

运行结果:

IO流(File类,IO流的分类,字节流和字符流,转换流,缓冲流,对象序列化)的更多相关文章

  1. 09、IO流—File类与IO流

    目录 一.File类 基本认识 实用方法 获取功能 重命名功能(包含剪切) 判断功能 创建.删除文件 实际小案例 二.IO流 1.认识IO流 2.IO流基类介绍 字节流基类介绍 字符流基类介绍 三.节 ...

  2. Java—IO流 File类的常用API

    File类 1.只用于表示文件(目录)的信息(名称.大小等),不能用于文件内容的访问. package cn.test; import java.io.File; import java.io.IOE ...

  3. java io包File类

    1.java io包File类, Java.io.File(File用于管理文件或目录: 所属套件:java.io)1)File对象,你只需在代码层次创建File对象,而不必关心计算机上真正是否存在对 ...

  4. Java IO之File和IO

    本系列我们主要总结一下Java中的IO.NIO以及NIO2. java.io.File 学习Java IO,首先让我们来了解File类吧,它是文件和目录路径名的抽象表示形式.因此你千万别误会File类 ...

  5. java IO之 File类+字节流 (输入输出 缓冲流 异常处理)

    1. File类

  6. Java基础---IO(二)--File类、Properties类、打印流、序列流(合并流)

    第一讲     File类 一.概述 1.File类:文件和目录路径名的抽象表现形式 2.特点: 1)用来将文件或文件夹封装成对象 2)方便于对文件与文件夹的属性信息进行操作 3)File类的实例是不 ...

  7. 021.1 IO流——File类

    ########################################IO流:    IO:用于处理设备上的数据的技术.设备:内存,硬盘,光盘    流:系统资源,Windows系统本身就可 ...

  8. IO流——File类(文件流类)

    java语言的输入输出操作是借助于输入输出包java.io来实现的,按传输方向分为输入流与输出流,从外设传递到应用程序的流为输入流,将数据从应用程序输入到外设的流为输出流. File类的构造方法: 1 ...

  9. JAVA:IO流——File类

    1.掌握File 类的作用 2.可以使用File 类中的方法对文件进行操作 所有的 io 操作都保存在 java.io 包中. 构造方法:public File (String pathname) 直 ...

  10. Java IO流-File类

    2017-10-24 23:50:22 File类 File类:文件和目录路径名的抽象表示形式.该文件或者目录不一定真实存在. * 构造方法 File类有四种构造方法,主要采用的构造方法师第二种,也就 ...

随机推荐

  1. js基础01

    常见的五大浏览器:chrome firfox ie opera safari 浏览器的解析器会把代码解析成用户所能看到的东西 www.2cto.com/kf/201202/118111.html浏览器 ...

  2. javascript第六章--BOM

    ① window对象 ② location对象 ③ navigator对象 ④ screen对象 ⑤ history对象

  3. Xilinx FPGA LVDS应用

    最近项目需要用到差分信号传输,于是看了一下FPGA上差分信号的使用.Xilinx FPGA中,主要通过原语实现差分信号的收发:OBUFDS(差分输出BUF),IBUFDS(差分输入BUF). 注意在分 ...

  4. 准备冲锋 golang入坑系列

    史前摘要: 本来想写读前必读,但连续几篇博文都写读前必读,感觉就没有了新意. 所以换成史前摘要,反正是一个意思. 此摘要的目的仍然是提醒点击而来的同学,本系列最新文章在这里.放到博客园的目的是为了方便 ...

  5. 一般处理程序获取Session方式

    今天写程序得时候遇到了一个问题:ajax在对ashx进行请求时如果按照 context.Request方式直接来获取值得话获取到得是空值,因此去网上搜了一下问题.现记录如下: ashx获取sessio ...

  6. android sdk manager 国内镜像

    //东软信息学院 mirrors.neusoft.edu.cn 80   //北京化工大学 ubuntu.buct.edu.cn/ubuntu.buct.cn 80   //中国科学院开源协会 mir ...

  7. 正确释放Vector的内存

    http://blog.jobbole.com/37700/ 今天在看微博的时候, 有人提出了一个对于Vector内存泄露的疑问( Link). 博主采用 Vector存储一些数据,但是发现在执行 c ...

  8. ASP.NET Core教程【三】实体字段属性、链接标签、并发数据异常、文件上传及读取

    前文索引:ASP.NET Core教程[二]从保存数据看Razor Page的特有属性与服务端验证ASP.NET Core教程[一]关于Razor Page的知识 实体字段属性 再来看看我们的实体类 ...

  9. c#游戏进程杀手

    我认为写博客还是比较重要的,特别是短时间写出一个含有新知识点的软件.这样总结下这次编程经验和再捋顺一下这次编程思路.首先来谈谈为什么想做这个小程序,一是感觉自己太贪玩想控制一下,二是也锻炼下自己的编程 ...

  10. linux磁盘管理系列-LVM的使用

    LVM是什么 LVM是Linux操作系统的逻辑卷管理器. 现在有两个Linux版本的LVM,分别是 LVM1,LVM2.LVM1是一种已经被认为稳定了几年的成熟产品,LVM2 是最新最好的LVM版本. ...