Java流,文件和I/O
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的更多相关文章
- java 流 文件 IO
Java 流(Stream).文件(File)和IO Java.io 包几乎包含了所有操作输入.输出需要的类.所有这些流类代表了输入源和输出目标. Java.io 包中的流支持很多种格式,比如:基本类 ...
- Java 流(Stream)、文件(File)和IO
Java.io包几乎包含了所有操作输入.输出需要的类.所有这些流类代表了输入源和输出目标. Java.io包中的流支持很多种格式,比如:基本类型.对象.本地化字符集等等. 一个流可以理解为一个数据的序 ...
- Java IO 文件与流基础
Java IO 文件与流基础 @author ixenos 摘要:创建文件.文件过滤.流分类.流结构.常见流.文件流.字节数组流(缓冲区) 如何创建一个文件 #当我们调用File类的构造器时,仅仅是在 ...
- java IO文件操作简单基础入门例子,IO流其实没那么难
IO是JAVASE中非常重要的一块,是面向对象的完美体现,深入学习IO,你将可以领略到很多面向对象的思想.今天整理了一份适合初学者学习的简单例子,让大家可以更深刻的理解IO流的具体操作. 1.文件拷贝 ...
- java 中 “文件” 和 “流” 的简单分析
java 中 FIle 和 流的简单分析 File类 简单File 常用方法 创建一个File 对象,检验文件是否存在,若不存在就创建,然后对File的类的这部分操作进行演示,如文件的名称.大小等 / ...
- Java笔记:Java 流(Stream)、文件(File)和IO
更新时间:2018-1-7 12:27:21 更多请查看在线文集:http://android.52fhy.com/java/index.html java.io 包几乎包含了所有操作输入.输出需要的 ...
- Java 字符流文件读写
上篇文章,我们介绍了 Java 的文件字节流框架中的相关内容,而我们本篇文章将着重于文件字符流的相关内容. 首先需要明确一点的是,字节流处理文件的时候是基于字节的,而字符流处理文件则是基于一个个字符为 ...
- Java - 17 Java 流(Stream)、文件(File)和IO
Java 流(Stream).文件(File)和IO Java.io包几乎包含了所有操作输入.输出需要的类.所有这些流类代表了输入源和输出目标. Java.io包中的流支持很多种格式,比如:基本类型. ...
- Java总结:Java 流(Stream)、文件(File)和IO
更新时间:2018-1-7 12:27:21 更多请查看在线文集:http://android.52fhy.com/java/index.html java.io 包几乎包含了所有操作输入.输出需要的 ...
- Java流和文件
File类:java.io包下与平台无关的文件和目录 java可以使用文件路径字符串来创建File实例,文件路径可以是绝对路径,也可以是相对路径,默认情况下,相对路径是依据用户工作路径,通常就是运行J ...
随机推荐
- 浅谈mysql触发器
什么是触发器?简单的说,就是一张表发生了某件事(插入.删除.更新操作),然后自动触发了预先编写好的若干条SQL语句的执行.触发器本质也是存储过程,只是不需要手动调用,触发某事件时自动调用.触发器里的S ...
- C# WPF从RIOT API获取数据(RIOT代表作品《英雄联盟》)
微信公众号:Dotnet9,网站:Dotnet9,问题或建议:请网站留言, 如果对您有所帮助:欢迎赞赏. C# WPF从RIOT API获取数据(RIOT代表作品<英雄联盟>) 阅读导航 ...
- 浅谈python的第三方库——numpy(二)
前一期博文中,初步探索了numpy中矩阵的几种运算操作,本文将展示numpy矩阵的元素抽取与合并操作. 1 元素抽取 在我们使用矩阵的时候,有时需要提取出矩阵的某些位置上的元素单独研究,这时就需要熟悉 ...
- P1001 A+B Problem(int,long long)
题目描述 输入两个整数 a,b,输出它们的和(∣a∣,∣b∣≤109). 注意 Pascal 使用 integer 会爆掉哦! 有负数哦! C/C++ 的 main 函数必须是 int 类型,而且最后 ...
- Zabbbix之十二------Zabbix实现微信报警通知及创建聚合图形
实战一:实现zabbix监控微信报警 1.在企业微信上注册账号 1.注册企业微信,管理员需要写上自己的真实姓名,扫描以下的二维码,与微信关联真实姓名. 2.登陆企业微信,然后创建一个微信故障通知应用 ...
- 【笔记】机器学习 - 李宏毅 - 4 - Gradient Descent
梯度下降 Gradient Descent 梯度下降是一种迭代法(与最小二乘法不同),目标是解决最优化问题:\({\theta}^* = arg min_{\theta} L({\theta})\), ...
- DoraBox sql注入&文件上传
SQL注入 1.sqli数字型 判断是否存在注入点,执行1 and 1=1,有回显判断存在注入点 判断字段数,执行1 order by 3以及执行1 order by 4时报错,判断字段数为3 判断具 ...
- Python数值运算
算术运算 a=10 b=2 + 加-两个对象相加 a+b输出结果12 - 减-得到负数或是一个数减去另一个数 a - b输出结果8 * 乘-两个数相乘或是返回一个被重复若干次的字符串 a * b输出结 ...
- web框架的基础原理
http协议 HTTP简介 HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本 ...
- 手写数字识别——基于LeNet-5卷积网络模型
在<手写数字识别——利用Keras高层API快速搭建并优化网络模型>一文中,我们搭建了全连接层网络,准确率达到0.98,但是这种网络的参数量达到了近24万个.本文将搭建LeNet-5网络, ...