- 浏览: 191900 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (75)
- JSP/Servlet (4)
- Spring (5)
- Hibernate (1)
- Struts (5)
- EJB (3)
- Swing (1)
- Core Java (29)
- Algorithm (2)
- HTML/CSS/JavaScript (0)
- JQuery/AJAX (1)
- Oracle (0)
- Design Pattern (2)
- MVC (0)
- Web服务器 (3)
- 杂项 (0)
- NetCDF On Java (0)
- Java Extension (2)
- iBATIS (4)
- English Articles (1)
- JavaEE (3)
- Java8 (3)
- Android (3)
- Maven (1)
- Hadoop (1)
- Docker (0)
- Java高并发 (0)
最新评论
-
Bll:
为什么要推荐jsp动作标签访问呢?
JavaBean入门 - 概念和简单例子 -
落雪封:
我检查过了,没有注释,只是大文本,也一直报这个错,求原因
Abator生成错误:XML document structures must start and end within the same entity
0. 概述:
Java中基于流的I/O构建在4个抽象类之上, 其中2个是字节流,另外2个是字符流。
字节流:
InputStream / OutputStream
当操作字节或其它二进制对象时,应当使用字节流。
字符流:
Reader / Writer
当操作字符或字符串时,应当使用字符流。
1. InputStream
InputStream: 输入字节流,它是一个抽象类。
常用主要方法:
int read()
返回代表下一个可用字节的整数,当文件达到末尾时,返回-1。
int read(bute buffer[])
尝试读取buffer.length个字节到buffer中,返回实际成功读取的字节数;文件到末尾返回-1。
int read(bute buffer[], int offset, int numBytes)
尝试读取numBytes个字节到buffer中,从buffer[offset]开始保存读取的字节;
返回实际成功读取的字节数;文件到末尾返回-1。
2. OutputStream
OutputStream: 输出字节流,它是一个抽象类。
常用主要方法:
void write(int b)
向输出流中写入单个字节。
void write(byte buffer[])
向输出流中写入一个完整的字节数组。
void write(byte buffer[], int offset, int numBytes)
从buffer[offset]开始将numBytes个字节写入输出流中。
void flush()
结束输出状态,刷新输出缓冲区。
3. FileInputStream
文件读取字节流。
常用构造函数:
FileInputStream(String filePath) (更常用)
FileInputStream(File fileObj)
一个同构输入流来读取文件内容的例子,演示了3种方式(单字节读取, 字节数组读取, 忽略部分字节读取)
代码如下:
运行结果如下:
Total Available Bytes: 1704
First 42 bytes of the file one read() at a time
package corejava8.io.stream;
import java.
Still Available: 1662
--------------------------------------------------------------
Reading the next 42 with one read(b[])
io.*;
public class FileInputStreamDemo {
Still Available: 1620
--------------------------------------------------------------
Skipping half of remaining bytes with skip()
Still Available: 810
Reading 21 into the end of array
io.*;
public class Fm.err.println("couldn
Still Available: 789
4. FileOutputStream
文件输出字节流,用于向文件中写入字节。
4个常用构造函数:
FileOutputStream(String filePath)
FileOutputStream(File fileObj)
FileOutputStream(String filePath, boolean append)
FileOutputStream(File fileObj, boolean append)
在开始下面的例子前,我们先提到流关闭的一个细节,那就是
在JDK 7之前的遗留代码,都使用显式地调用close()方法来关闭流,这种办法
比较笨拙。
老的代码:
新的代码(JDK 7及以后的代码):
是不是代码变得更加简洁了?
我们的例子:
运行结果如下:
第一个,第二个文件内容都是:
Now is the time for all good men
to come to the aid of their country
and pay their due taxes.
第三个文件跳过第一个单词,内容如下:
is the time for all good men
to come to the aid of their country
and pay their due taxes.
上述代码中:
byte buf[] = source.getBytes();
用于获取源数据(字符串)的字节数组。
Java中基于流的I/O构建在4个抽象类之上, 其中2个是字节流,另外2个是字符流。
字节流:
InputStream / OutputStream
当操作字节或其它二进制对象时,应当使用字节流。
字符流:
Reader / Writer
当操作字符或字符串时,应当使用字符流。
1. InputStream
InputStream: 输入字节流,它是一个抽象类。
常用主要方法:
int read()
返回代表下一个可用字节的整数,当文件达到末尾时,返回-1。
int read(bute buffer[])
尝试读取buffer.length个字节到buffer中,返回实际成功读取的字节数;文件到末尾返回-1。
int read(bute buffer[], int offset, int numBytes)
尝试读取numBytes个字节到buffer中,从buffer[offset]开始保存读取的字节;
返回实际成功读取的字节数;文件到末尾返回-1。
2. OutputStream
OutputStream: 输出字节流,它是一个抽象类。
常用主要方法:
void write(int b)
向输出流中写入单个字节。
void write(byte buffer[])
向输出流中写入一个完整的字节数组。
void write(byte buffer[], int offset, int numBytes)
从buffer[offset]开始将numBytes个字节写入输出流中。
void flush()
结束输出状态,刷新输出缓冲区。
3. FileInputStream
文件读取字节流。
常用构造函数:
FileInputStream(String filePath) (更常用)
FileInputStream(File fileObj)
一个同构输入流来读取文件内容的例子,演示了3种方式(单字节读取, 字节数组读取, 忽略部分字节读取)
代码如下:
package corejava8.io.stream; import java.io.*; public class FileInputStreamDemo { public static void main(String args[]) { int size; // Use try-with-resources to close the stream try (FileInputStream f = new FileInputStream("src/corejava8/io/stream/FileInputStreamDemo.java")) { System.out.println("Total Available Bytes: " + (size = f.available())); int n = size / 40; // 通过循环每次单字节读取 System.out.println("First " + n + " bytes of the file one read() at a time"); for (int i = 0; i < n; i++) { System.out.print((char) f.read()); } System.out.println("\nStill Available: " + f.available()); System.out.println("--------------------------------------------------------------"); // 字节数组读取 System.out.println("Reading the next " + n + " with one read(b[])"); byte b[] = new byte[n]; if (f.read(b) != n) { System.err.println("couldn’t read " + n + " bytes."); } System.out.println(new String(b, 0, n)); System.out.println("\nStill Available: " + (size = f.available())); System.out.println("--------------------------------------------------------------"); // 忽略部分字节读取 System.out.println("Skipping half of remaining bytes with skip()"); f.skip(size / 2); System.out.println("Still Available: " + f.available()); System.out.println("Reading " + n / 2 + " into the end of array"); if (f.read(b, n / 2, n / 2) != n / 2) { System.err.println("couldn't read " + n / 2 + " bytes."); } System.out.println(new String(b, 0, b.length)); System.out.println("\nStill Available: " + f.available()); } catch (IOException e) { System.out.println("I/O Error: " + e); } } }
运行结果如下:
Total Available Bytes: 1704
First 42 bytes of the file one read() at a time
package corejava8.io.stream;
import java.
Still Available: 1662
--------------------------------------------------------------
Reading the next 42 with one read(b[])
io.*;
public class FileInputStreamDemo {
Still Available: 1620
--------------------------------------------------------------
Skipping half of remaining bytes with skip()
Still Available: 810
Reading 21 into the end of array
io.*;
public class Fm.err.println("couldn
Still Available: 789
4. FileOutputStream
文件输出字节流,用于向文件中写入字节。
4个常用构造函数:
FileOutputStream(String filePath)
FileOutputStream(File fileObj)
FileOutputStream(String filePath, boolean append)
FileOutputStream(File fileObj, boolean append)
在开始下面的例子前,我们先提到流关闭的一个细节,那就是
在JDK 7之前的遗留代码,都使用显式地调用close()方法来关闭流,这种办法
比较笨拙。
老的代码:
try { FileOutputStream f0 = new FileOutputStream("file1.txt"); // 文件写入操作 } catch(IOException e) { System.out.println("An I/O Error Occurred"); } finally { try { if(f0 != null) f0.close(); } catch(IOException e) { System.out.println("Error Closing file1.txt"); } } }
新的代码(JDK 7及以后的代码):
try (FileOutputStream f0 = new FileOutputStream("file1.txt")) { // 文件写入操作 } catch(IOException e) { System.out.println("An I/O Error Occurred"); }
是不是代码变得更加简洁了?
我们的例子:
package corejava8.io.stream; import java.io.*; public class FileOutputStreamDemo { public static void main(String args[]) { String source = "Now is the time for all good men\n" + " to come to the aid of their country\n" + " and pay their due taxes."; byte buf[] = source.getBytes(); // Use try-with-resources to close the files. try (FileOutputStream f0 = new FileOutputStream("file1.txt"); FileOutputStream f1 = new FileOutputStream("file2.txt"); FileOutputStream f2 = new FileOutputStream("file3.txt")) { // write to first file for (int i = 0; i < buf.length; i++) f0.write(buf[i]); // write to second file f1.write(buf); // write to third file f2.write(buf, 3, buf.length - 3); } catch (IOException e) { System.out.println("An I/O Error Occurred"); } } }
运行结果如下:
第一个,第二个文件内容都是:
Now is the time for all good men
to come to the aid of their country
and pay their due taxes.
第三个文件跳过第一个单词,内容如下:
is the time for all good men
to come to the aid of their country
and pay their due taxes.
上述代码中:
byte buf[] = source.getBytes();
用于获取源数据(字符串)的字节数组。
发表评论
-
Java高并发和多线程系列 - 1. 线程基本概念
2018-04-16 09:45 3621. 什么是线程? 线程和进程的区别 在了解线程的概念前,我 ... -
Java多线程编程-同步和锁
2017-10-04 13:29 01. 竞态条件(Race Condition) 两个或以上线 ... -
Java开发 - 异常 - 使用throws
2016-04-21 11:35 560如果一个方法可能会产生异常,我们需要用throws关键字给它标 ... -
Java开发 - 异常 - 抛出异常
2016-04-21 11:24 629问题: 如何抛出一个系统异常并且捕获它 代码如下: pu ... -
Java8通过管道流(stream)来实现集合的一些聚合函数
2015-10-22 10:24 1801stream的一些聚合函数包括: count(), findF ... -
数组自定义排序
2015-10-21 14:17 1458CustomComparator.java package ... -
数组排序
2015-10-21 09:58 704SortArray.java package coreja ... -
HashMap使用范例
2015-10-20 14:25 792HashMapDemo.java package core ... -
Java8新特性 - Lambda表达式 - Functional Interfaces
2015-10-20 09:52 775Mapper.java package corejava8 ... -
使用Hashtable和线程技术制作自己简单的内存缓存
2013-07-19 11:06 11571. 首先,我们要做一个缓存数据类 这个数据类要有一个数据 ... -
Java OutOfMemory 解决
2013-07-19 10:18 835Eclipse中设置 -
String.format方法使用
2013-06-18 15:21 1916一.常规类型、字符类型和数值类型的格式说明符的语法如下:%[a ... -
JDK1.6连接SQL Server2008失败的原因
2011-07-29 15:05 10781. 需要下载最新sql server jdbc,从微软网站下 ... -
jar命令打包java带有包名的类文件
2011-07-13 09:40 1313jar cvfm JTool.jar jtool\ui\man ... -
ikvm转换jar文件成dll
2011-06-19 22:35 1746ikvmc -out:BasicFileOutput.dll ... -
jar命令打包java类文件
2011-06-19 22:33 1368jar cvfm BasicFileOutput.jar ma ... -
Java命令行编译自动生成包目录
2011-06-19 18:01 1393javac -d . BufferedInputFile.ja ... -
用命令行编译和执行带有包的java文件
2011-06-19 15:24 2787主要介绍java和javac命令的使用, 分带package和 ... -
FilenameFilter过滤目录下文件
2011-06-19 10:01 990编写一个实现FilenameFilter接口的类 publ ... -
Java调用Oracle的过程和函数
2010-05-07 21:06 1346/** 调用数据库里的一个函数 一个函数本质上一个返回 ...
相关推荐
3. **IO流**:Java IO流处理文件、网络、内存数据的输入输出,分为字节流和字符流两大类,又分为输入流和输出流,以及节点流和处理流。熟悉BufferedReader、FileWriter、InputStream和OutputStream等类的使用,对于...
- 字节流与字符流:InputStream, OutputStream, Reader, Writer的层次结构及其关系。 - 缓冲流:BufferedInputStream, BufferedReader等缓冲流的使用,提高读写效率。 - 文件复制:使用流进行文件复制的实现。 7...
Java中的流分为字节流和字符流两种。字节流处理单个字节的数据,如`InputStream`和`OutputStream`家族。而字符流处理Unicode字符,如`Reader`和`Writer`家族。对于文本文件操作,字符流通常更为方便,因为它们能...
- **IO流**:Java提供了输入流(Input Stream)和输出流(Output Stream)用于数据的读写,分为字节流和字符流两大类,还有缓冲流、转换流、对象流等。 - **文件操作**:Java提供了File类来处理文件的创建、删除、...
《CoreJava12示例代码》是一份针对Java编程语言深度学习的重要资源,主要涵盖了CoreJava12版本中的核心概念和特性。这份压缩包文件包含了丰富的示例代码,旨在帮助开发者深入理解Java语言的各个方面,提升编程技能。...
- **字节流与字符流**:理解二进制和文本数据的处理方式,包括FileInputStream、FileOutputStream、FileReader、FileWriter等。 - **缓冲区**:BufferedInputStream、BufferedOutputStream、BufferedReader、...
5. **IO与NIO**:传统IO与New IO(NIO)的区别和应用场景,包括文件操作、字符流和字节流,以及通道、选择器和缓冲区的使用。 6. **Java序列化**:Java序列化用于将对象状态转化为字节流,便于存储和网络传输。书中...
5. **字符串与字符流**:讨论了String类的特性和操作,以及字符输入/输出流的使用,如Reader和Writer类。 6. **输入/输出流**:讲解了字节流的使用,包括InputStream和OutputStream家族,以及文件I/O操作。 7. **...
流分为字节流和字符流,还有输入流和输出流,以及过滤流和缓冲流等高级流类。 7. **集合框架**:Java集合框架包括List、Set、Map接口以及ArrayList、LinkedList、HashSet、HashMap等实现类。泛型的引入使得集合可以...
InputStream和OutputStream用于处理字节流,Reader和Writer处理字符流。 十三、集合框架 Java集合框架包括List、Set、Queue和Map等接口,以及ArrayList、LinkedList、HashSet、HashMap等实现类。它们提供了一种高效...
书中详细讲解了字节流和字符流的使用,包括FileInputStream、FileOutputStream、BufferedReader、BufferedWriter等类,以及如何处理文件路径和目录操作。 ### 6. 多线程编程 Java的并发模型允许在单个程序中执行多...
8. **IO流**:学习输入/输出流体系,包括字节流、字符流、对象流以及缓冲流,理解流的方向和操作文件的方法。 9. **多线程**:Java提供了Thread类和Runnable接口来实现并发,理解线程同步机制(如synchronized...
6. **输入/输出流**:讲解了I/O流的概念,包括文件读写、字符流和字节流,以及缓冲区和对象序列化。 7. **异常处理**:介绍如何使用try-catch-finally语句块来捕获和处理异常,以及自定义异常类。 8. **多线程**:...
6. **输入/输出(I/O)**:介绍Java的流模型,包括文件I/O、字节流、字符流、对象序列化和数据流。 7. **泛型**:讲解泛型的基本概念,如何在类、接口和方法中使用泛型,以及通配符和类型擦除。 8. **多线程**:包括...
- 同样包括字符流和字节流。 以上就是从给定的文件信息中提炼出的部分Core Java基础知识点,涵盖了面向对象的基本概念、JVM、JRE、JDK的关系、垃圾回收机制、方法重写与重载、关键字理解、字符串操作以及集合框架...
4. **字符串与字符流**:介绍String类的使用,以及字符和字节流的读写操作,包括InputStream、OutputStream、Reader和Writer。 5. **输入/输出系统**:涵盖了File类,NIO(New I/O)框架,以及数据的序列化和反序列...
6. **IO流**:学习文件读写、字节流和字符流,以及缓冲流的使用。 7. **多线程**:理解线程的创建方式(Thread类和Runnable接口)、线程同步(synchronized关键字、wait()、notify())以及线程池。 8. **反射机制*...
5. **输入/输出流**:介绍I/O流的概念,包括字节流和字符流,文件操作,对象序列化,以及NIO(New I/O)框架。 6. **多线程**:讲解线程的创建与管理,同步机制(synchronized关键字,wait()和notify()),以及...
8. **输入/输出流**:理解I/O流的概念,包括文件操作、字节流和字符流,以及缓冲区的使用。 9. **文件与目录操作**:学习如何读写文件,创建、删除目录,以及使用File类进行文件和目录管理。 10. **多线程**:了解...
8. **IO流**:文件操作,字节流和字符流,以及缓冲流的使用。 9. **多线程**:线程的创建、同步机制(synchronized关键字、wait/notify方法)和线程池。 10. **枚举与注解**:枚举类型的使用,注解(Annotation)...