java 中关于I/O操作一些相关类的使用

         最近想换工作,在网上投了几家公司,去面试的时候,好几家面试官都问一些基础的java语法,还要我手写一个赋值文件的程序,这就让我感觉很无力,本来java的基础就不是很好,平时都是用eclipse编程(没办法提示害的),所有大部分类跟方法都记不全,只记得个大概的用法,所以面试的结果就可想而知有多惨了.

         看来想找个好工作,看来这java基础还是得补一补的;首先我瞄准的目标就是java的I/O操作.(谁让每次面试,面试官老是问呢微笑).


        正文:

        对于java的输入输出第一感觉就是类多,很难记住,首先我还是从最基本的开始将吧,在java中,把输入输出包装成一个流,我们可以对流对象操作就可以达到我们的I/O操作需求,其中流根据操作方向的不同分为输入流:InputStream ;和输出流:OutputStream;其中两者之间的区别在于:

 

InputStream的数据源不在内存中,是把例如文件等数据源中的数据输入到内存中.


OutputStream的作用刚好相反,它的作用就是把内存中的数据源输出去.

     但是由于这个两个类都是抽象类,所以我们一般不用其进行java的I/O操作,而java中I/O绝大多数的类都是这两个类的子类,所有我们可以根据我们的需要选择相应的子类进行java的I/O操作;接下来我们先看一下java I/O中的大体的一些类:

FileOutputStream:用于对文件的操作,将内存中的数据通过该流对象输出到制定的文件中.

FileInputStream:用户对文件的操作,与FileOutputStream的作用刚好相反,用户读取制定文件中的数据到内存中.

ByteArrayInputStream,ByteArrayOutputStream,CharArrayInputStream,CharArrayOutputStream:在内存中开辟一个字符/字节数组空间.

BufferInputStream,BufferOutputStream,BufferReader,BufferWriter具有缓存功能.

DataInputStream和DataOutputStream能对基本数据进行读写,例如int  char long等


java I/O中根据每次读取的一个一个字节还是两个字节可以把这些流分成两类:

字节流-------包括字节输入流和字节输出流:

    字节输入流:InputStream,FileInputStream,ByteArrayInputStream,DataInputStream,BufferInputStream等.

    字符输入流:Reader, FileReader,CharArrayReader,BufferReader,InputStreamReader,PipedReader等.


另外还可以分为节点流和处理流:

 

字节输入流:

字节输出流:

字符输入流:

字符输出流:


(这几张图片转载自:http://blog.csdn.net/yuebinghaoyuan/article/details/7388059)


下面我们介绍一下一些常用的输入 输出流的使用:

FileOutputStream ----往文件中写数据:

File fileDirectory = new File("/home/lm");
        if (!fileDirectory.exists()) {//该文件夹不存在就创建文件夹
            fileDirectory.mkdirs();
        }
        File  outputFile = new File(fileDirectory, "test.txt");//创建文件
        try {
            
            FileOutputStream out = new FileOutputStream(outputFile);
            String dataSource = "hello world!";
            byte[] btData =dataSource.getBytes();
            out.write(btData);
            out.close();//关闭输出流,不然可能会造成内存溢出
            
        } catch (Exception e) {
            // TODO: handle exception
        }

FileInputStream----往内存中读入数据:

File  file = new File("/home/opt/test.txt");//文件路径
        String dirPath = file.getParent();
        File  dirFile = new File(dirPath);
        if (!dirFile.exists()){
            dirFile.mkdirs();
        }
        FileInputStream inputStream;
        try {
            
            inputStream = new FileInputStream(file);
            byte[] inputContent = new byte[1024];
            int len = 0;
            while (inputStream.read(inputContent)!=-1) {
                System.out.println(new String(inputContent));
            }
            inputStream.close();
        } catch (FileNotFoundException e) {
            System.out.println("文件没有找到!");
        }catch (Exception e) {
            System.out.println("对文件时发生错误!");
        }


BufferWriter-----使用缓存区,把数据写写进缓冲区,再从缓存区中把数据写进输入流

File fileDir = new File("你的文件路劲");
        if (!fileDir.exists()) {
            fileDir.mkdirs();
        }
        File file = new File(fileDir,"outFile.txt");
        
        try {
            
            FileOutputStream outputStream = new FileOutputStream(file,true);
            
            BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(outputStream));//其中OutputStreamWriter是字节转换输出流,把字节输出流转换成字符输出流
            
            writer.write("\n Today,I'm a new people!");
            writer.close();
            outputStream.close();
            
            
        } catch (Exception e) {
            // TODO: handle exception
        }

BufferReader-----使用缓存去读入数据,写把输入流中的数据放入在缓冲区,然后每次读数据时从缓存去读取,只有当缓冲区的数据不够时,才对磁盘进行真实的读写操作.

try {
            
            FileInputStream foStream = new FileInputStream(file);
            
            BufferedReader buffer = new BufferedReader(new InputStreamReader(foStream)) ;//其中InputStreamReader是字节转换输入流,把字节输入流转换成字符输入流.
            
            
            String line;
            while((line=buffer.readLine())!=null){
                System.out.println(line);
            }
            buffer.close();
            foStream.close();
            
        } catch (Exception e) {
            // TODO: handle exception
        }


FileWriter---------字符文件输出流

try {
            
            FileWriter writer = new FileWriter(file,true);//其中file表示的要操作的文件对象,布尔值为true表示写入文件中的数据以追加的方式添加到文件的最后,如果该值为false或者不手动

           设定,那么表示数据以覆盖原有数据的方式写入数据.

            writer.write("\naspend at this file!");
            writer.close();
            
        } catch (Exception e) {
            // TODO: handle exception
        }


FileReader-------字符文件输入流

try {
            FileReader reader = new FileReader(file);
            char[] content = new char[1024];
            while(reader.read(content)!=-1){
                System.out.println(new String(content));
            }
        } catch (Exception e) {
            // TODO: handle exception
        }
       
-------------------------------------------------------------------------写的比较粗糙,如有错误,多谢指正---------------------------------------------------------------------------

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以和你讨论关于JavaFile、二进制流和标准输入输出流的相关知识。 首先,FileJava用于表示文件和目录路径的。它提供了一系列方法,可以对文件和目录进行操作,比如创建、删除、重命名、获取大小、获取路径等等。使用File可以方便地对文件和目录进行管理。 其次,二进制流是Java用于处理二进制数据的流,主要包括InputStream和OutputStream两个抽象。InputStream用于从输入源读取二进制数据,OutputStream用于向输出目的地写入二进制数据。二进制流可以处理任意型的二进制数据,比如图片、音频、视频等等。 最后,标准输入输出流是Java用于与控制台进行交互的流,主要包括System.in和System.out两个静态变量。System.in表示标准输入流,用于从控制台读取数据;System.out表示标准输出流,用于向控制台输出数据。通过标准输入输出流,我们可以方便地与用户进行交互,接收用户输入的数据,输出程序执行结果等等。 关于如何使用File和二进制流,可以通过如下代码进行演示: ```java import java.io.*; public class FileDemo { public static void main(String[] args) { // 创建一个File对象,表示要读取的文件 File file = new File("test.txt"); try { // 创建一个FileInputStream对象,用于读取文件 FileInputStream fis = new FileInputStream(file); // 创建一个byte数组,用于存储读取到的数据 byte[] buffer = new byte[1024]; // 读取数据到buffer int len = fis.read(buffer); // 输出读取到的数据 System.out.println(new String(buffer, 0, len)); // 关闭输入流 fis.close(); } catch (IOException e) { e.printStackTrace(); } // 创建一个File对象,表示要写入的文件 File file2 = new File("test2.txt"); try { // 创建一个FileOutputStream对象,用于写入文件 FileOutputStream fos = new FileOutputStream(file2); // 创建一个byte数组,用于存储要写入的数据 byte[] data = "Hello World!".getBytes(); // 写入数据到文件 fos.write(data); // 关闭输出流 fos.close(); } catch (IOException e) { e.printStackTrace(); } } } ``` 以上代码使用FileInputStream和FileOutputStream分别读取和写入文件的数据。 关于如何使用标准输入输出流,可以通过如下代码进行演示: ```java import java.io.*; public class StdioDemo { public static void main(String[] args) { // 从标准输入流读取数据 BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); try { System.out.print("请输入你的名字:"); String name = br.readLine(); System.out.print("请输入你的年龄:"); int age = Integer.parseInt(br.readLine()); System.out.println("你的名字是:" + name); System.out.println("你的年龄是:" + age); } catch (IOException e) { e.printStackTrace(); } // 向标准输出流输出数据 System.out.println("Hello World!"); } } ``` 以上代码使用BufferedReader从标准输入流读取数据,使用System.out向标准输出流输出数据。 希望以上内容能够帮助到你理解File、二进制流和标准输入输出流的相关知识。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值