文档章节

java文件输入输出

开源中国段子手
 开源中国段子手
发布于 2015/11/23 21:19
字数 980
阅读 128
收藏 4

在java程序中,对于数据的输入/输出操作以流(Stream)方式进行;J2SDK提供了各种各样的“流”类,用以获取不同种类的数据;程序中通过标准的方法输入或输出数据,I/O流提供一条通道程序,可以使用这条通道把源中的字节序列送给目的地把输入流的指向称作源,程序从指向源的输入流中读取源读取源中的数据而输出流的指向是字节要去的一个目的地,程序通过向输出流中写入数据把信息传递到目的地。虽然I/O流经常与磁盘文件存取有关,但是程序的源和目的地也可以是键盘、鼠标、内存或者显示器窗口。

输入流通过使用read()方法从输入流读出源中的数据,输出流通过用write()方法把数据写入输出流到达目的地。

读/写流的一般流程

读(Reading)

1.open a stream

2.while more information

3.    read information

4.close the stream

写(Writing)

  1. open a stream

  2. while more information

    write information

  3. close ths stream

两种流的定义(读取信息的基本数据单位)

字节流:一个字节一个字阶的读或者写,能够输出任何类型数据

字符流:一个字符一个字符读或者写,本质是基于字节流读取字节时,去查指定的吗表


输入/输出流的分类

java.io包中定义了多个流类型来实现输入/输出功能;可以从不同的角度对其进行分类:

按照数据流的方向的不同可以分为输出流输出流

按照处理数据单位的不同可以分为字节流和字符流

按照功能不同可以分为字节流和处理流



标准输入输出

package com.zhong.test;
import java.io.IOException;
public class StandardStream {
    public static void main(String args[]) throws IOException{
        byte b[] = new byte[10];
        System.in.read(b);
    }
}



scanner是队System.in.read();的扩展,SYstem.in.read();是每按一次键接收到一个一个字符,而scanner则可以根据不同的条件接受不同的值。

Scanner reader = new Scanner(System.in);

然后reader对象调用下列方法(函数),读取用户在命令行输入的各种数据类型:

nextByte(),nextDouble(),nextFloat().nextInt(),nextLine(),nextLong(),nextShort()

上述方法都会造成阻塞,等待用户在命令行输入数据回车确认。

package com.zhong.test;
import java.util.Scanner;
public class ScannerDemo {
    public static void main(String args[])
    {
        Scanner sc = new Scanner(System.in);
        int s = sc.nextShort();
        System.out.println("s = "+s);
    }
}

文件的读写操作

文件读/写流程

1.打开文件流2.条件判断3.读出/写入4.关闭文件流

两种类型文件

FIleInputStream/FileOutputStream(字节流)

FileReader/FileWriter(字符流)

package com.zhong.test;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class CopyBytes {
    public static void main(String args[]) throws IOException{
        File inputfile = new File("/root/Desktop/targetfile.txt");
        File outputfile = new File("/root/Desktop/resultfile.txt");
        FileInputStream in = new FileInputStream(inputfile);
        FileOutputStream out = new FileOutputStream(outputfile);
        int c;
        while((c = in.read()) != -1){
            out.write(c);
        }
        in.close();
        out.close();
    }
}

提高文件读写效率

两类缓冲流

针对字节流:

java.io.BufferedInputStream类

java.io.BufferedOutStream类

针对字符流

java.io.BufferedReader类

java.io.BufferedWriter类


IO的缓冲区的存在就是为了提高效率,把要操作的数据存进缓冲区,然后一次性把缓冲区的内容写道目的地,而不是写一次就往目的地写一次,所以建立缓冲区对象时,要先有流对象。

package com.zhong.test;
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.IOException;
public class BufferRead {
    public static void main(String args[]) throws IOException{
        String filename = "/root/Desktop/String.txt";
        FileInputStream fis = new FileInputStream(filename);
        BufferedInputStream bis = new BufferedInputStream(fis);
        int count = 0;
        int c;
        while((c = bis.read())!=-1){
            if(c == 'A'){
                count++;
            }
        }
        fis.close();
        bis.close();
        System.out.println(""+count);
    }
}
package com.zhong.test;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
public class BufferWriter {
    public static void main(String args[]) throws IOException{
        FileWriter fw = null;
        fw = new FileWriter("/root/Desktop/String.txt");
        BufferedWriter bfw = new BufferedWriter(fw);
        bfw.write("asda2312asd\n");
        bfw.write("aaaaaaasccc6656xzc23\n");
        bfw.write("aa3as4f546xckjb asjkdbkjck\n");
        bfw.flush();
        bfw.close();
    }
}
package com.zhong.test;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Echo {
    public static void main(String args[]) throws IOException{
        BufferedReader bw = new BufferedReader(new InputStreamReader(System.in));
        String s;
        while((s = bw.readLine()).length()!=0){
            System.out.println(s);
        }
    }
}


© 著作权归作者所有

开源中国段子手
粉丝 44
博文 178
码字总数 95519
作品 0
南京
程序员
私信 提问
关于Java编程基础学习输入输出IO的问题

Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互...

Java小辰
2018/05/23
0
0
java Compiler API (java编译api)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 https://blog.csdn.net/u010398771/article/details/90474813 在早期的版本中(Java SE5及以前...

长河
05/23
0
0
JDK的命令行工具系列 (二) javap、jinfo、jmap

javap: 反编译工具, 可用来查看java编译器生成的字节码 参数摘要: -help 帮助 -l 输出行和变量的表 -public 只输出public方法和域 -protected 只输出public和protected类和成员 -package 只输...

qingshanli
2018/07/16
0
0
Java多线程学习(五)线程间通信知识点补充

系列文章传送门: Java多线程学习(一)Java多线程入门 Java多线程学习(二)synchronized关键字(1) java多线程学习(二)synchronized关键字(2) Java多线程学习(三)volatile关键字 Ja...

一只蜗牛呀
2018/04/16
0
0
Java的多进程运行模式分析

一般我们在java中运行其它类中的方法时,无论是静态调用,还是动态调用,都是在当前的进程中执行的,也就是说,只有一个java虚拟机实例在运行。而 有的时候,我们需要通过java代码启动多个j...

精华之王
2009/04/11
84
0

没有更多内容

加载失败,请刷新页面

加载更多

vue vue-router beforeRouteEnter

本文转载于:专业的前端网站➬vue vue-router beforeRouteEnter beforeRouteEnter (to, from, next) { // 在渲染该组件的对应路由被 confirm 前调用 // 不!能!获取组件实例 `thi...

前端老手
51分钟前
4
0
Spring Boot 2 实战:结合 Docker 容器化

1. 前言 Docker 是啥?好处是啥? 什么现在如果作为一名开发你还不知道甚至没有用过我都感觉你落伍了。Docker 是一种虚拟化的容器技术,目的为了打造持续集成、版本控制、可移植性、隔离性和...

码农小胖哥
55分钟前
4
0
Linux 常用查询句柄的命令(Too many open files)

摘要 查询命令 进程占用的句柄总数 lsof -n | wc -l 查看哪一个进程占用的句柄最多 lsof -n|awk '{print $2}'|sort|uniq -c|sort -nr|more 第一列 是 占用句柄数; 第二列 是 进程号 PID;...

liangxiao
55分钟前
5
0
JavaScript权威指南笔记5

第五章、语句 0、概述 JS程序是一系列可执行语句的集合。 通过控制语句来改变语句的默认执行顺序。 控制语句:条件、循环和跳转(如return、break和throw) 2、复合语句 当多条语句被当做一条语...

_Somuns
今天
5
0
vmware安装ubuntu18.04总是 panic -not syncing:corrupted stack end detected inside schedule

Vmware 安装ubuntu 总是卡着不动, 提示panic -not synciong 网上提示很多办法,都试了效果不佳, 找到了完美解决办法 你的兼容模式重新选一下为6.0,兼容性对硬件有要求的 即可实现 成功安装...

dragon_tech
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部