IO(一)

 

IO类其实就是分为三大类:

     File类 文件操作类 ;

     字节操作类 ;

     字符操作类 .

File类是Io类中唯一代表磁盘文件本身的对象. File提供的方法能够创建 文件

这一点我是先实现了下 如下面代码:

import java.io.*;

public class Test{

public static void main(String []args){

File f = new File("g://1.txt");

try{

f.createNewFile();

}catch(IOException e){

System.out.println(e.getMessage());

}

}

}

该代码在控制台的输出没有结果 这代码中我在控制台编译出了几个低级错误一是 File f = new File("g://1.txt")  我开始的时候 没有把这个绝对路径当做一个 字符创 去看待 直接就写了 , javac 之后就报错了另外要注意的就是这个 createNewFile() 方法 在API文档中看它是 throws Exception的 那么我们在调用的时候就需要 try{} catch(){} !

至于输出结果就没有了 只需要直接去G盘根目录下去 寻找 1.txt 文件就好了!

假如在这个文件中  写入一些内容  比如"aaaaaaaaa"  然后再次编译执行该文件 发现控制台并没有报错 然后我们去查看盘 存在有 1.txt 文件 ,打开发现文件中的"aaaaaaaaa" 也还是存在的.  这说明了什么呢就像API文档中说的那样他会首先判断该路径下是否存在有这个文件如果存在的话则不会创建,保留原来的文件当发现没有的话 才会去创建这么一个文件的

除了这个createNewFile()方法可以判断某一文件存在 还有另一种方法可以判断 

exists

public boolean exists()

测试此抽象路径名表示的文件或目录是否存在。 

返回:

当且仅当此抽象路径名表示的文件或目录存在时,返回 true;否则返回 false

抛出:

SecurityException - 如果存在安全管理器,且其 SecurityManager.checkRead(java.lang.String) 方法拒绝对文件或目录进行写访问

用这个 exists() 做了个demo ,

import java.io.*;

public class IODemo2{

public static void main(String []args){

File f = new File("g://1.txt");

if(f.exists()){

    System.out.println("文件时存在的");

}else{

    System.out.println("文件时不存在的");

}

}

}

在控制台中的显示是这样的:

  

那么这里介绍一个删除方法

delete

public boolean delete()

删除此抽象路径名表示的文件或目录。如果此路径名表示一个目录,则该目录必须为空才能删除。 

返回:

当且仅当成功删除文件或目录时,返回 true;否则返回 false

抛出:

SecurityException - 如果存在安全管理器,且其 SecurityManager.checkDelete(java.lang.String) 方法拒绝对文件进行删除访问

这个方法可以删除文件,

import java.io.* ;

public class IODemo3{

public static void main(String []args){

File f = new File("g://学习总结//Java SE//MLDN//IO()//Test2.java");

if(f.exists()){

f.delete();

}else{

try{

f.createNewFile();

}catch(IOException e){

System.out.println(e.getMessage());

}

}

}

}

如果前面指定的绝对路径上存在有该文件的话 则 

F.delete() 方法会将该文件删除.

如果该文件不存在的话 则会创建该文件.

 再认识一个新的方法

list

public String[] list()

返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中的文件和目录。 

如果此抽象路径名不表示一个目录,那么此方法将返回 null。否则返回一个字符串数组,每个数组元素对应目录中的每个文件或目录。表示目录本身及其父目录的名称不包括在结果中。每个字符串是一个文件名,而不是一条完整路径。

不保证所得数组中的相同字符串将以特定顺序出现,特别是不保证它们按字母顺序出现。

这个list() 会返回指定绝对路径上的所有文件名称和 目录名称!  例如下面

import java.io.*;

public class IODemo4{

public static void main(String args[]){

File f = new File("g://学习总结//Java SE//MLDN//IO()");

String []aa = f.list();

for(int i=0;i<aa.length;i++){

System.out.println(aa[i]);

}

}

}

list() 会返回  g://学习总结//Java SE//MLDN//IO(路径下所有的目录名称和文件名称返回成一个 String 数组的形式 并且输出结果如下:

如果

File f = new File("g://学习总结//Java SE//MLDN//IO()//asdasd.fsafa");

的构造参数不是一个实际有效地路径那么执行的话会报错!

那又如何检测这个路径是否正确呢?

isDirectory

public boolean isDirectory()

测试此抽象路径名表示的文件是否是一个目录。 

返回:

当且仅当此抽象路径名表示的文件存在 是一个目录时,返回 true;否则返回 false

抛出:

isDirectory() 可以检测这个绝对路径是不是有效地路径

如下面代码写

import java.io.*;

public class IODemo5{

public static void main(String args[]){

File f = new File("g://学习总结//Java SE//MLDN//IO()//fds");

if(f.isDirectory()){

String []aa = f.list();

for(int i=0;i<aa.length;i++){

System.out.println(aa[i]);

}

}else{

System.out.println("路径不对");

}

}

}

isDirectory() 就可以判断这个路径是不是一个正确的路径 从而进行  if else 的判断

在控制台的结果就是这样的

Java中一个数据流的读取 是打开一个流如果有信息 就读入然后关闭流!

把它比喻成一本书的话 就是这样了首先找到这本书然后从书中读取数据过度到大脑之中书读完之后还要讲述放下 (也就相当于关闭)

而写也基本相同,, 在第二步中将 "如果有信息就读入改成了 "如果有信息就写入"

那么说了 在File类中的操作只是对文件的创建删除 判断是否存在 判断构造参数是否为一个正确的路径 还有根据一个路径 来 遍历该目录下 所有的文件 和 目录下的文件

那么怎么在创建了一个文件之后 再在文件中写入内容呢?

首先RandomAccessFile 可以做到该类与文件内容有关

public class RandomAccessFile

extends Object

implements DataOutputDataInputCloseable

此类的实例支持对随机访问文件的读取和写入。随机访问文件的行为类似存储在文件系统中的一个大型 byte 数组。存在指向该隐含数组的光标或索引,称为文件指针;输入操作从文件指针开始读取字节,并随着对字节的读取而前移此文件指针。如果随机访问文件以读取/写入模式创建,则输出操作也可用;输出操作从文件指针开始写入字节,并随着对字节的写入而前移此文件指针。写入隐含数组的当前末尾之后的输出操作导致该数组扩展。该文件指针可以通过 getFilePointer 方法读取,并通过 seek 方法设置。

通常,如果此类中的所有读取例程在读取所需数量的字节之前已到达文件末尾,则抛出 EOFException(是一种 IOException)。如果由于某些原因无法读取任何字节,而不是在读取所需数量的字节之前已到达文件末尾,则抛出 IOException,而不是 EOFException。需要特别指出的是,如果流已被关闭,则可能抛出 IOException

先写了一个文件试试

 import java.io.*;

public class IODemo6{

public static void main(String []args) throws IOException{

RandomAccessFile raf = new RandomAccessFile("g://test.txt","rw");

String name = "zero";

int age = 12 ;

raf.writeChars(name);

raf.writeInt(age);

raf.close();

}

}

该文件在盘目录下查看, OK存在内容也没有问题但内容却是这个样子的 ,先放着 一会再说

 

writeChars

public final void writeChars(String s)

                      throws IOException

按字符序列将一个字符串写入该文件。每个字符均写入数据输出流,类似于使用 writeChar 方法。写入从文件指针的当前位置开始。 

指定者:

接口 DataOutput 中的 writeChars

参数:

s - 要写入的 boolean 值。

抛出:

IOException - 如果发生 I/O 错误。

File 与文件有关

RandomAccessFile 与 文件内容有关 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值