黑马程序员系列第八篇 IO(2)

ASP.Net+Android+IOS开发  、Net培训、期待与您交流!

(前言:本篇文章主要依据毕向东老师的课程视频整理而成,如要详细学习,请观看毕老师视频  百度网盘链接地址:http://pan.baidu.com/s/1mgrkJWW)

 目录:1、File类       2、存储对象      3、RandomAccessFile类

 1、File类

File类  :将文件或文件夹封装成对象,方便对文件或文件夹的属性信息进行操作

File中Separator 字段是可跨平台的分隔符

对文件对象的基本操作,封装到了几个方法中演示

 1     //列出指定文件内文件及所以子文件信息
 2     public static void getAllFilesInfo(File file){
 3         //设置过滤条件,即搜索条件
 4         System.out.println(file);
 5         File[] files=file.listFiles();
 6         //打印信息
 7         for(int i=0;i<files.length;i++){
 8             if(files[i].isDirectory())
 9                 getAllFilesInfo(files[i]);
10             else System.out.println(files[i]);
11         }
12     }
13     //列出指定文件内满足指定条件的文件信息
14     public static void getFilesFiltedInfo(File file){
15         //设置过滤条件,即搜索条件
16         File[] files=file.listFiles(new FilenameFilter(){
17             public boolean accept(File dir, String name){
18                 return name.endsWith(".Bin");
19             }
20         });
21         //打印信息
22         for(File fil:files)
23             System.out.println(fil.getName()+":"+fil.getTotalSpace());
24     }
25
26     //获取指定文件的信息
27     public static void getFileInfo(File file){
28         if(!file.exists())
29             System.out.println(file.getName()+" 文件不存在!!!");
30         else{
31         String absolutePath=file.getAbsolutePath();//获取绝对路径
32         String path=file.getPath();//获取相对路径
33         long time=file.lastModified();
34         long len=file.length();
35         String parent=file.getParent();//还回绝对路径下的父目录,如果获取的是相对路径则还回null
36         System.out.println("absolutePath:"+absolutePath+" path:"+path+" lastModifiedTime:"+time+" len"+len);
37         }
38     }
39     //列出系统文件信息
40     public static void listRoots(){
41         File[] files=File.listRoots();
42         for(File file:files)
43             System.out.println(file.getAbsolutePath()+file.getFreeSpace());
44     }

 2、存储对象    

需要将对象序列化\持久化\可存储化

没有方法的接口被称为标记接口    类的序列化值可以自己定义,否则由类自动生成

静态变量不能被序列化,非静态变量用transient修饰也可不被序列化

存储和读取对象的简单操作:

 1 public class IoTest {
 2
 3     public static void main(String[] args) {
 4             //向文件中存储对象
 5              writeObject("D://Student.object",new Student("xujiax111",21));
 6              //从文件中读取对象
 7            //  readObject("D://Student.object");
 8     }
 9     public static void writeObject(String fileName,Object obj){
10
11             ObjectOutputStream oos=null;
12         try {
13             //创建流资源
14             oos=new ObjectOutputStream(new FileOutputStream(fileName)) ;
15                 oos.writeObject(obj);
16         } catch (FileNotFoundException e) {
17             e.printStackTrace();
18         } catch (IOException e) {
19             e.printStackTrace();
20         }finally{
21             try {
22                 if(oos!=null)
23                 oos.close();//关闭流资源
24             } catch (IOException e) {
25                 e.printStackTrace();
26             }
27         }
28     }
29     public static void readObject(String fileName){
30         //创建流资源
31            ObjectInputStream ois=null;
32         try {
33             ois=new ObjectInputStream(new FileInputStream(fileName));
34             System.out.println(ois.readObject());
35         } catch (FileNotFoundException e) {
36             e.printStackTrace();
37         } catch (IOException e) {
38             e.printStackTrace();
39         } catch (ClassNotFoundException e) {
40             e.printStackTrace();
41         }finally{
42                 try {
43                     if(ois!=null)
44                     ois.close();//关闭流资源
45                 } catch (IOException e) {
46                     e.printStackTrace();
47                 }
48         }
49     }
50 }
51 //常见一个student对象类,并对其实现序列化
52 class Student implements Serializable{
53
54     private String name;
55     private int age;
56
57     public Student(String name,int age){
58         this.name=name;
59         this.age=age;
60     }
61     public String toString(){
62         return name+":"+age;
63     }
64 }

 3、RandomAccessFile类

java的RandomAccessFile提供对文件的读写功能,与普通的输入输出流不一样的是RamdomAccessFile可以任意的访问文件的任何地方。

这就是“Random”的意义所在。

RandomAccessFile的对象包含一个记录指针,用于标识当前流的读写位置,这个位置可以向前移动,也可以向后移动。

RandomAccessFile包含两个方法来操作文件记录指针。

一个简单的向文件读写操作的代码示例:

 1 public class RandomAccessFileDemo {
 2
 3     public static void main(String[] args) throws IOException {
 4
 5           randomWriter();
 6           randomReader();
 7     }
 8     //向文件中写数据
 9     public static void randomWriter() throws IOException{
10         //创建对象
11         RandomAccessFile raf=new RandomAccessFile("D://randomAccess.txt","rw");
12         raf.seek(12*0);//设置指针位置,可以规定写的位置
13         raf.write("许佳".getBytes());
14         raf.writeInt(23);
15         raf.seek(12*1);
16         raf.write("许佳佳".getBytes());
17         raf.writeInt(24);
18         //关闭流资源
19         raf.close();
20     }
21     //向文件中读数据
22     public static void randomReader() throws IOException{
23
24         RandomAccessFile raf=new RandomAccessFile("D://randomAccess.txt","rw");
25         raf.seek(12*0);//设置指针位置,可以规定读取的位置
26         byte[] bytes=new byte[8];
27         raf.read(bytes);
28         String name=new String(bytes);
29         int age=raf.readInt();
30         //打印读取劫夺
31         System.out.println("name="+name+"::age="+age);
32         //关闭流资源
33         raf.close();
34     }
35 }

初学者难免错误,欢迎评判指教,持续更正ing...........

ASP.Net+Android+IOS开发  、Net培训、期待与您交流!

时间: 2024-08-06 13:29:25

黑马程序员系列第八篇 IO(2)的相关文章

黑马程序员系列第四篇 集合(1)

ASP.Net+Android+IOS开发  .Net培训.期待与您交流! (前言:本篇文章主要依据毕向东老师的课程视频整理而成,如要详细学习,请观看毕老师视频  百度网盘链接地址:http://pan.baidu.com/s/1o6mwDzO 目录:1.集合概述      2.Collection.Iterator接口     3.List接口与其ArrayList.LinkedList.Vector子类 1.集合概述  下图为JDK中集合的框架设计图,我们主要使用的集合为黑色方框中的四种集合

黑马程序员系列第六篇 面向对象基础

ASP.Net+Android+IOS开发  .Net培训.期待与您交流! (前言:本篇文章主要依据毕向东老师的课程视频整理而成,如要详细学习,请观看毕老师视频  百度网盘链接地址:http://pan.baidu.com/s/1mgngVl2) 目录:1.面向对象三大特性    2.类和对象    3.内部类   1.面向对象三大特性    封装.继承.多态 封装 概念:是指隐藏对象的属性和实现细节,仅对外提供公共访问方式. 好处:将变化隔离:便于使用:提高重用性:安全性. 封装原则:将不需要

黑马程序员——JAVA学习笔记十(IO)

1,    可以从其中读入一个字节序列的对象成为输入流,可以向其中写入一个字节序列的对象就做输出流.这些字节序列的来源地可以是文件,也可以是网络连接或者内存块.抽象类InputStream和OutputStream构成了I/O层次的基础.因为字节流不便于处理以Unicode存储的信息,所以有了Writer和Reader抽象类,这些从其中继承的类都是读入和写入基于2个字节的Unicode码元,而不是单个字节.   2,    InputStream 与OutputStream: abstract

黑马程序员系列第二篇 多线程(2)

ASP.Net+Android+IOS开发  .Net培训.期待与您交流! (前言:本篇文章主要依据毕向东老师的课程视频整理而成,如要详细学习,请观看毕老师视频  百度网盘链接地址:http://pan.baidu.com/s/1sjQRHDz) 目录:1.线程通信--生产消费者示例(线程通信安全.等待唤醒机制)    2.停止线程.及其会出现的问题.及解决的办法    3.守护线程及几个Thread的方法                   4.工作中线程的常见写法         1.线程通

黑马程序员系列第九篇 类加载器

ASP.Net+Android+IOS开发  .Net培训.期待与您交流! 推荐阅读相关书籍<深入java虚拟机> 目录:1.java.lang.ClassLoader类介绍      2.类加载器的结构     3.加载类的过程     4.自定义类加载器 类加载器负责加载 Java 类的字节代码到 Java 虚拟机中. 类加载器是 Java 语言的一个创新,也是 Java 语言流行的重要原因之一.它使得 Java 类可以被动态加载到 Java 虚拟机中并执行. Java 虚拟机使用 Jav

黑马程序员---java基础-Java之IO

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 一.概念 1.概念 IO流用来处理设备之间的数据传输 Java对数据的操作是通过流的方式 Java用于操作流的对象都在IO包中 流按流向分为两种:输入流,输出流. 流按操作类型分为两种:字节流与字符流.  字节流可以操作任何数据,字符流只能操作纯字符数据,比较方便. 2.常用基类 字节流的抽象基类: InputStream ,OutputStream 字符流的抽象基类: Reader , Wr

黑马程序员--Java基础--文件数据IO操作

文件数据IO操作 1. Reader和Writer 1.1. 字符流原理 Reader是所有字符输入流的父类而Writer是所有字符输出流的父类.字符流是以字符(char)为单位读写数据的.一次处理一个unicode.字符流都是高级流,其底层都是依靠字节流进行读写数据的,所以底层仍然是基于字节读写数据的. 1.2. 常用方法 Reader的常用方法: int read() 读取一个字符,返回的int"值低16"位有效. int read(char[] chs) 从该流中读取一个字符数组

黑马程序员--oc基础第一篇

一.oc的基础知识 1.oc的源代码的扩展名为:“.m” 2.不再用include了,改用#import<Foundation/foundation.h>,区别就是import自动检查是否包含了相同的头文件,不需要再在c语言中用IFDef了. 3.类的声明用@interface @end,将声明代码写在两部分之间. 4.BOOL 类型的实质为char typedef signed char BOOL: #define Yes (BOOL) 1 #define No (Bool) 0 5.在oc

黑马程序员--oc基础第九篇(Foundation框架上)

九 . oc基础(Foundation框架上) 1.四中结构体类型:NSRange,NSPoint,NSSize,NSRect 1>NSRange:是一个以为的结构由成员location和成员length共同组成. *NSRange的创建方式:NSRange range=NSMakeRange(2.4),代表范围是从2开始一直到5,location为2,length为4 *NSString *[email protected]“I love you”:NSRange range=[str ran