java.io包中包含几乎所有可能永远需要在Java中执行输入和输出(I/ O)类。所有这些数据流代表一个输入源和输出目标。 java.io包中的流支持多种数据,如基本类型,对象,本地化的字符等

流可以被定义为一个数据序列。 InputStream用于读取从一个源数据,OutputStream是用于将数据写入到一个目的地。

JAVA I/O提供了强有力,灵活的支持,因为它涉及到的文件和网络,但本教程介绍与流非常基本的功能和I / O。我们会来一个接一个看下面最常用的例子:

读取控制台输入:

Java输入控制台由System.in读取完成。为了获得一个连接到控制台基于字符的数据流,包装System.in在一个BufferedReader对象,创建一个字符流。下面是最常见的语法来获得BufferedReader:

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

一旦得到BufferedReader,我们可以使用read()方法来达到一个字符或readLine()方法来读取从控制台的字符串。

从控制台读取字符:

要读取一个BufferedReader一个字符,使用read( ) (其语法时才如下所示)方法:

int read( ) throws IOException

每一次read( )被调用时,它读取输入流的字符,并返回它作为一个整数的返回值。1表示到流的末尾。正如所看到的,它可以抛出一个IOException异常。

下面的程序演示read()通过读取字符从控制台,直到用户键入 "q":

// Use a BufferedReader to read characters from the console.

import java.io.*;

public class BRRead {
public static void main(String args[]) throws IOException
{
char c;
// Create a BufferedReader using System.in
BufferedReader br = new BufferedReader(new
InputStreamReader(System.in));
System.out.println("Enter characters, 'q' to quit.");
// read characters
do {
c = (char) br.read();
System.out.println(c);
} while(c != 'q');
}
}

下面是一个示例运行:

Enter characters, 'q' to quit.
123abcq
1
2
3
a
b
c
q

从控制台读取字符串:

从键盘读取一个字符串,使用readLine( )是BufferedReader类的成员。其一般形式如下所示:

String readLine( ) throws IOException

下面的程序演示的BufferedReader和的readLine()方法。该程序读取并显示的文本行直到输入"end":

// Read a string from console using a BufferedReader.
import java.io.*;
public class BRReadLines {
public static void main(String args[]) throws IOException
{
// Create a BufferedReader using System.in
BufferedReader br = new BufferedReader(new
InputStreamReader(System.in));
String str;
System.out.println("Enter lines of text.");
System.out.println("Enter 'end' to quit.");
do {
str = br.readLine();
System.out.println(str);
} while(!str.equals("end"));
}
}

下面是示例的运行结果:

Enter lines of text.
Enter 'end' to quit.
This is line one
This is line one
This is line two
This is line two
end
end

写入控制台输出:

控制台输出使用print()和调用println()是最容易完成的,如前所述。这些方法是由PrintStream类是引用bySystem.out的对象的类型来定义。尽管System.out 是字节流,使用它进行简单的程序输出还是可以接受的。

因为PrintStream 是从派生的OutputStream输出流,它也实现了​​低层次的方法Write()。因此 write()方法可以用来写入控制台。写最简单的形式是由PrintStream的定义如下所示:

void write(int byteval)

此方法写入到流由byteval指定的字节。虽然byteval被声明为一个整数,只有低8位写入。

例子:

以下是使用write()方法来输出字符“A”后跟一个换行符到屏幕上一个简单的例子:

import java.io.*;

// Demonstrate System.out.write().
public class WriteDemo {
public static void main(String args[]) {
int b;
b = 'A';
System.out.write(b);
System.out.write('
');
}
}

这将产生输出屏幕上简单的“A”字母。

A

注: 一般不会经常使用write() 来执行控制台输出,因为print()和println() 一样基本上更容易使用。

读取和写入文件:

如前面所述,一个流可以被定义为一个数据序列。 InputStream的用于读取从一个源数据和OutputStream的是用于将数据写入到一个目的地。

下面是类的层次结构来处理输入和输出流。

这两个重要的数据流是文件输入流和文件输出流,这将在本教程中加以讨论:

FileInputStream:

此流被用于读取来自文件的数据。可以使用关键字new创建的对象和有几种类型的构造函数可用。

下面的构造函数接受一个文件名作为一个字符串创建一个输入流对象来读取文件。

InputStream f = new FileInputStream("C:/java/hello");

下面的构造函数接受一个文件对象来创建一个输入流对象来读取文件。首先我们创建一个使用File()方法,如下所示的文件对象:

File f = new File("C:/java/hello");
InputStream f = new FileInputStream(f);

一旦有了InputStream对象,再有就是helper方法,可以用来读取流或做其他的操作在流列表。

SN 方法描述
1 public void close() throws IOException{}
此方法关闭文件输出流。发布与该文件相关的所有系统资源。抛出一个IOException。
2 protected void finalize()throws IOException {}
这种方法清除连接到该文件。请确保此文件输出流的close方法被调用时,有此流不再有引用。抛出一个IOException。
3 public int read(int r)throws IOException{}
此方法读取从InputStream中指定的数据字节。返回一个int。返回数据的下一个字节,如果是文件的末尾,则返回-1。
4 public int read(byte[] r) throws IOException{}
此方法读取从输入流r.length字节到一个数组中。返回读取的字节总数。如果文件末尾,则返回-1。
5 public int available() throws IOException{}
给出了可以从该文件输入流中读取的字节数。返回一个int。

也有其他重要的输入流,更多的细节可以参考以下链接:

文件输出流:

文件输出流是用于创建一个文件并写入数据到它。流会创建一个文件,如果它不存在,打开它的输出之前。

这里有两个构造函数可以用来创建一个FileOutputStream对象。

下面的构造函数接受一个文件名作为一个字符串创建一个输入流对象写入文件:

OutputStream f = new FileOutputStream("C:/java/hello")

下面的构造函数接受一个文件对象创建一个输出流对象写入文件。首先,我们创建一个使用File() 方法,如下一个文件对象:

File f = new File("C:/java/hello");
OutputStream f = new FileOutputStream(f);

一旦有OutputStream对象,再有就是helper方法的列表,它可以被用来写入流或做其他操作上的流。

SN 方法描述
1 public void close() throws IOException{}
此方法关闭文件输出流。发布与该文件相关的所有系统资源。抛出一个IOException。
2 protected void finalize()throws IOException {}
这种方法清除连接到该文件。请确保此文件输出流的close方法被调用时,有此流不再有引用。抛出一个IOException。
3 public void write(int w)throws IOException{}
此方法将指定字节写入到输出流。
4 public void write(byte[] w)
写入w.length字节自提字节数组的OutputStream。

也有其他重要的输出流,更多的细节可以参考以下链接:

例子:

下面是例子来演示InputStream和OutputStream:

import java.io.*;

public class fileStreamTest{

   public static void main(String args[]){

   try{
byte bWrite [] = {11,21,3,40,5};
OutputStream os = new FileOutputStream("test.txt");
for(int x=0; x < bWrite.length ; x++){
os.write( bWrite[x] ); // writes the bytes
}
os.close(); InputStream is = new FileInputStream("test.txt");
int size = is.available(); for(int i=0; i< size; i++){
System.out.print((char)is.read() + " ");
}
is.close();
}catch(IOException e){
System.out.print("Exception");
}
}
}

上面的代码将创建文件test.txt,并会写入给定的数字在二进制格式。同样是在标准输出屏幕上输出。

文件导航和I/O:

还有其他几个类,我们将去了解文件导航的基本知识和I/O。

Java中的目录:

创建目录:

有两个有用的文件实用工具方法,它可以用来创建目录:

  • mkdir( ) 方法创建一个目录,在成功时返回假失败真的。失败表明,在文件对象中指定的路径已经存在,或者该目录不能被创建,因为整个路径尚不存在。

  • mkdirs() 方法同时创建一个目录和目录下的所有父目录。

下面的示例创建"/tmp/user/java/bin" 目录:

import java.io.File;

public class CreateDir {
public static void main(String args[]) {
String dirname = "/tmp/user/java/bin";
File d = new File(dirname);
// Create directory now.
d.mkdirs();
}
}

编译并执行上面的代码来创建 "/tmp/user/java/bin".

注: 的Java会自动在UNIX和Windows路径分隔符按约定保护。如果在WindowsJava使用正斜杠(/),该路径仍然会正确地解析。

读取目录:

目录是一个包含其他文件和目录列表的文件。当创建一个文件对象,它是一个目录,isdirectory()方法将返回true。

可以调用 list( )时该对象上提取里面的其他文件和目录列表。这里显示的程序演示了如何使用 list( )来检查一个目录的内容:

import java.io.File;

public class DirList {
public static void main(String args[]) {
String dirname = "/tmp";
File f1 = new File(dirname);
if (f1.isDirectory()) {
System.out.println( "Directory of " + dirname);
String s[] = f1.list();
for (int i=0; i < s.length; i++) {
File f = new File(dirname + "/" + s[i]);
if (f.isDirectory()) {
System.out.println(s[i] + " is a directory");
} else {
System.out.println(s[i] + " is a file");
}
}
} else {
System.out.println(dirname + " is not a directory");
}
}
}

这将产生以下结果:

Directory of /tmp
bin is a directory
lib is a directory
demo is a directory
test.txt is a file
README is a file
index.htmll is a file
include is a directory

Java流,文件和I/O的更多相关文章

  1. java 流 文件 IO

    Java 流(Stream).文件(File)和IO Java.io 包几乎包含了所有操作输入.输出需要的类.所有这些流类代表了输入源和输出目标. Java.io 包中的流支持很多种格式,比如:基本类 ...

  2. Java 流(Stream)、文件(File)和IO

    Java.io包几乎包含了所有操作输入.输出需要的类.所有这些流类代表了输入源和输出目标. Java.io包中的流支持很多种格式,比如:基本类型.对象.本地化字符集等等. 一个流可以理解为一个数据的序 ...

  3. Java IO 文件与流基础

    Java IO 文件与流基础 @author ixenos 摘要:创建文件.文件过滤.流分类.流结构.常见流.文件流.字节数组流(缓冲区) 如何创建一个文件 #当我们调用File类的构造器时,仅仅是在 ...

  4. java IO文件操作简单基础入门例子,IO流其实没那么难

    IO是JAVASE中非常重要的一块,是面向对象的完美体现,深入学习IO,你将可以领略到很多面向对象的思想.今天整理了一份适合初学者学习的简单例子,让大家可以更深刻的理解IO流的具体操作. 1.文件拷贝 ...

  5. java 中 “文件” 和 “流” 的简单分析

    java 中 FIle 和 流的简单分析 File类 简单File 常用方法 创建一个File 对象,检验文件是否存在,若不存在就创建,然后对File的类的这部分操作进行演示,如文件的名称.大小等 / ...

  6. Java笔记:Java 流(Stream)、文件(File)和IO

    更新时间:2018-1-7 12:27:21 更多请查看在线文集:http://android.52fhy.com/java/index.html java.io 包几乎包含了所有操作输入.输出需要的 ...

  7. Java 字符流文件读写

    上篇文章,我们介绍了 Java 的文件字节流框架中的相关内容,而我们本篇文章将着重于文件字符流的相关内容. 首先需要明确一点的是,字节流处理文件的时候是基于字节的,而字符流处理文件则是基于一个个字符为 ...

  8. Java - 17 Java 流(Stream)、文件(File)和IO

    Java 流(Stream).文件(File)和IO Java.io包几乎包含了所有操作输入.输出需要的类.所有这些流类代表了输入源和输出目标. Java.io包中的流支持很多种格式,比如:基本类型. ...

  9. Java总结:Java 流(Stream)、文件(File)和IO

    更新时间:2018-1-7 12:27:21 更多请查看在线文集:http://android.52fhy.com/java/index.html java.io 包几乎包含了所有操作输入.输出需要的 ...

  10. Java流和文件

    File类:java.io包下与平台无关的文件和目录 java可以使用文件路径字符串来创建File实例,文件路径可以是绝对路径,也可以是相对路径,默认情况下,相对路径是依据用户工作路径,通常就是运行J ...

随机推荐

  1. 《手把手教你构建自己的 Linux 系统》学习笔记(4)

    汇编链接器(Binutils) 这是一个软件包,这个软件包其实是一个工具集,里面含有了大量的用于汇编程序活着读取二进制文件相关的程序. CC 它是一条命令的别名,这条命令的作用是使用 GCC 的 C ...

  2. C#画图之饼图

    public JsonResult DrawPie() { // 预置颜色 List<Color> colors = new List<Color>() { Color.Fro ...

  3. 吴裕雄--天生自然 R语言数据可视化绘图(1)

    par(ask=TRUE) opar <- par(no.readonly=TRUE) # make a copy of current settings attach(mtcars) # be ...

  4. 并发编程之J.U.C的第一篇

    并发编程之J.U.C AQS 原理 ReentrantLock 原理 1. 非公平锁实现原理 2)可重入原理 3. 可打断原理 5) 条件变量实现原理 3. 读写锁 3.1 ReentrantRead ...

  5. 一些linux软件国内源

    1. ubuntu 版本号 Ubuntu 12.04 (LTS)代号为precise. Ubuntu 14.04 (LTS)代号为trusty. Ubuntu 15.04 代号为vivid. Ubun ...

  6. cf1012B

    题意简述: 给定一个 n×m的矩阵,其中 q 个位置已经被填充. 有一条规则,如果 (r1,c1) ,(r1,c2),(r2,c1) 均被填充,则 (r2,c2) 也被填充.任何被其他三个位置生成的位 ...

  7. JAVA控制流程

    Java代码有三种执行结构流程,顺序结构.分支结构.循环结构 顺序结构 顺序结构是最简单的代码执行结构,从代码开始逐步执行每一句代码到结束 public class C { public static ...

  8. Android ListView的批量处理(多选/反选/删除)

    在Android开发中经常遇到使用ListView的情况,有时候需要的不仅仅是列表显示,还有长按列表进行多选,并且批量删除的情况,在这里记录一下自己的所学. 先上效果图: 几个需要用到的核心方法: / ...

  9. Pikachu-Unsafe Filedownload(不安全的文件下载)

    不安全的文件下载概述 文件下载功能在很多web系统上都会出现,一般我们当点击下载链接,便会向后台发送一个下载请求,一般这个请求会包含一个需要下载的文件名称,后台在收到请求后 会开始执行下载代码,将该文 ...

  10. 免费生成二维码接口,可直接嵌入到web项目中,附带嵌入方法,任意颜色二维码,任意大小二维码!

    在线体验连接:http://www.zhaimaojun.top/qrcode/ 你是否在项目中寻找方便而且免费的可以直接嵌入到项目中的二维码生成工具呢?你找到了这里,说明你已经找到了!不要犹豫直接拿 ...