java I/O之常用操作

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

IO流用来处理设备之间的数据传输
Java对数据的操作是通过流的方式
Java用于操作流的对象都在IO包中

File类在整个IO包中与文件本身有关的操作类,所有的与文件本身有关指的是创建、删除文件等操作。在java.io包中的File类本身是一个跨平台的文件操作类,所以在操作中要更多的考虑到各个操作系统的区别。

File 即指文件也指文件夹。

File类构造方法和字段摘要 

static String pathSeparator  路径分隔符,window下是";"。 

static char pathSeparatorChar   路径分隔符,window下是";"。 

static String separator  路径分隔符,window下是"\"。 

static char separatorChar  路径分隔符,window下是"\"。

File(File parent, String child) 根据 parent 抽象路径名和 child 路径名字符串创建一个新 File 实例。 

File(String pathname)  通过将给定路径名字符串转换为抽象路径名来创建一个新 File 实例。 

File(String parent, String child) 根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 实例。 

File(URI uri)  通过将给定的 file: /URI 转换为一个抽象路径名来创建一个新的 File 实例。 

File的相关方法

String getName():返回文件名或路径名(若是路径,返回最后一级子路径名)

String getPath():返回对象对应的路径名

File  getAbsoluteFile():返回绝对路径

String getAbsolutePath():返回对象对应的绝对路径

String getParent():返回文件目录的上一级目录名

boolean renameTo(File newName):重命名此File对象对应的文件或目录,若重命名成功返回true;

boolean exists():判断对象对应的文件或目录是否存在;

boolean canWrite():判断对象对应文件或目录是否可写;

boolean canRead():判断对象对应文件或目录是否可读;

boolean isFile():判断对象是文件,不是目录;

boolean isDirectory()  判断对象的文件是否是一个目录; 

boolean isAbsolute() 判断对象对应文件或目录是否为绝对路径名; 

 

boolean createNewFile() 当且仅当不存在,该方法创建一个该File对象所指定的新文件,创建成功返回true。 

boolean delete():删除File对象所对应的文件或路径;

boolean mkdir() 创建File对象所对应的目录,调用该方法的File对象必须对应路径,而不是文件。

String[] list():列出File对象的所有子文件名和路径名。

File[] listFiles():列出File对象的所有子文件和路径。

static File[] listRoots():列出系统所有的根路径;

import java.io.File;

import java.io.IOException;

public class Demo1 {

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

File f = new File("E:/你好.txt");

System.out.println(f.createNewFile());

System.out.println(f.getName());

System.out.println(f.getParent());

System.out.println(f.length());

}

}

转换流:

InputSteamReader :字节到字符的桥梁。解码

OutputStreamWriter :字符到字节的桥梁。编码

流的操作规律:

之所以要弄清楚这个规律,是因为流对象太多。开发时不知道用哪个对象合适。

想知道开发用到哪些对象,就只有通过四个明确即可。

1,明确源和目的(汇)

  源: InputStream Reader

   目的: OutputStream Writer

2,明确数据是否是纯文本数据。

   源:是 纯文本:Reader

       否 InputStream 

   目的:是纯文本 Writer

         否: OutPutStream

   到这里,就可以明确需求中具体要使用哪个体系了。

3,明确具体的设备。

   源设备:

        硬盘: File

        键盘:System.in

        内存: 数组

        网络:Socket流

   目的设备:

       硬盘: File

        键盘:System.out

        内存: 数组

        网络:Socket流

 4 是否需要其他额外功能

   1 是否需要高效(缓冲区)

     是,就加上Buffer   

转换流

InputSteamReader :字节到字符的桥梁。解码

OutputStreamWriter :字符到字节的桥梁。编码

需求1 复制一个文本文件

1,明确源和目的(汇)

  源: InputStream Reader

   目的: OutputStream Writer

2 是否是纯文本?

  是!

  源:Reader

  目的:Writer

3 明确具体设备:

  源:硬盘 File

  目的:硬盘 File

FileReader fr=new  FileReader("a.txt");

FileWriter fw=new  FileWriter("b.txt");

4 需要额外功能吗?

  BufferReader bufr=new BufferReader(new FileReader(“a.txt"));

  BufferWriter bufw=new  BufferWriter (new FileWriter("b.txt"));

需2:读取键录入信息,并写入到一个文件中。

1,明确源和目的(汇)

  源: InputStream Reader

   目的: OutputStream Writer

2 是否是纯文本?

  是!

  

  源:Reader

  目的:Writer

3 明确设备

   源: 键盘 System.in

   目的:硬盘 File

InputStrea in=System.in

FileWriter fw=new FileWriter("b.txt");

这样做可以完成,但是麻烦。将读取的字节数据转换成字符串。再由字符流操作。

4 需要额外功能吗?

  需要:转换 。将字节流转成字符流。因为明确的源是Reader,这样操作文本数据就便捷

  所以要将已有的字节流转成字符流,使用字节--》字符。InputStreamReader

  InputStreamReader isr=new InputStreamReader(System.in);

  FileWriter fw=new FileWriter("b.txt");

还需要功能吗?

需要:想高效 

  BufferedReader bufr=new BufferedReader(new InputStreamReader(System.in))

    BufferedWriter bufw=new BufferedWriter(new FileWriter("b.txt")) ;

需求3 讲一个文本文件数据显示在控制台上。

   1,明确源和目的(汇)

       源: InputStream Reader

       目的: OutputStream Writer

  2 是否是纯文本?

       是!

       源:Reader

        目的:Writer

   3 明确设备

      源: 硬盘 File

       目的:控制台:System.out

   FileReader fr=new FileReader("a.txt");

   OutputStream out =new System.out //PrintStream

4 需要额外功能么?

需要:转换。

    FileReader fr=new FileReader("a.txt");

    OutputStreamWriter osw=new OuputStreamWriter(System.out);

需要高效。

   BufferedReader bufr=new BufferedReader(FileReader("a.txt"));

   BufferedReader bufw=new BufferReader(new OuputStreamWriter(System.out));

4 需求 读取键盘录入数据,显示在控制台上。

  1,明确源和目的(汇)

       源: InputStream Reader

       目的: OutputStream Writer

   2 是否是纯文本?

       是!

       源:Reader

        目的:Writer

    3 明确设备

      源: 键盘 System.in

       目的:控制台:System.out

   InputStream in=Syste.in

   OutputStream out=System.out;

4 明确额外功能?

  需要转化,因为都是字节流,但是操作的却是文本数据。

  所以使用字符流操作起来更为便捷

 InputStreamReader isr=new InputStreamReader(System.in);

 OutputReaderWriter osw=new  OutputReaderWriter (System.out);

为了将其高效。

 BufferedReader bufr=new  BufferedReader(new InputStreamReader(System.in));

 BufferedWriter bufw=new BufferedWriter(new OutputReaderWriter (System.out));

例如:

import java.io.BufferedInputStream;

import java.io.BufferedOutputStream;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.IOException;

public class CopyMp3Test {

/**

 * @param args

 * @throws IOException 

 */

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

copy_4();

}

//千万不要用,效率没有!

public static void copy_4() throws IOException {

FileInputStream fis = new FileInputStream("c:\\0.mp3");

FileOutputStream fos = new FileOutputStream("c:\\4.mp3");

int ch = 0;

while((ch =fis.read())!=-1){

fos.write(ch);

}

fos.close();

fis.close();

}

//不建议。 

public static void copy_3() throws IOException {

FileInputStream fis = new FileInputStream("c:\\0.mp3");

FileOutputStream fos = new FileOutputStream("c:\\3.mp3");

byte[] buf = new byte[fis.available()];

fis.read(buf);

fos.write(buf);

fos.close();

fis.close();

}

public static void copy_2() throws IOException {

FileInputStream fis = new FileInputStream("c:\\0.mp3");

BufferedInputStream bufis = new BufferedInputStream(fis);

FileOutputStream fos = new FileOutputStream("c:\\2.mp3");

BufferedOutputStream bufos = new BufferedOutputStream(fos);

int ch = 0;

while((ch=bufis.read())!=-1){

bufos.write(ch);

}

bufos.close();

bufis.close();

}

public static void copy_1() throws IOException {

FileInputStream fis = new FileInputStream("c:\\0.mp3");

FileOutputStream fos = new FileOutputStream("c:\\1.mp3");

byte[] buf = new byte[1024];

int len = 0;

while((len=fis.read(buf))!=-1){

fos.write(buf,0,len);

}

fos.close();

fis.close();

}

}

 

我的总结:一些经常用到的方法一定要熟悉,并熟记。I/O是java的一大块重要知识!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值