字符输入流
BufferedReader
从 Reader 中读取多个字符到一个缓冲区,然后返回整个缓冲区内容。使小量读写更加
有效。
CharArrayReader
从一个 Char 数组中顺序读入多个字符
FileReader
从文件中顺序读入多个字符,是 InputStreamReader 的子类,能从一个自动创建的
FileInputStream 中读取数据。
FilterReader
字符输入流过滤器类的超类
InputStreamReader
从一个字节输入流读入字符,使用默认的编码方式或指定的编码方式将字节转化成字符
LineNumberReader
读取多行文本,并记录已经读取多少内容。
PipedReader
读取它所连接的 PipedOutputStream 中的多个字符。在多线程程序中使用。
PushbackReader
将固定大小的“回推缓冲区”添加到 Reader 中,从而这些内容可以是 “读不出”的
,这在某些解析程序中很有用。
Reader
所有字符输入流的超类
StringReader
从一个字符串中顺序读入字符
-------------------------------------------------------------
字节输出流
BufferedOutputStream
将字节按缓冲区输出,当缓冲区满时才将其中字节写往 OutputStream
ByteArrayOutputStream
往字节数组中写入字节
CheckedOutputStream
这个 java.util.zip 包中的类,计算写入 OutputStream 中数据的校验合
DataOutputStream
以 java 基本类型的二进制形式向 OutputStream 写入
DeflaterOutputStream
GZIPOutputStream 和 ZipOutputStream 的超类
FileOutputStream
向文件中顺序写入字节
FilterOutputStream
字节输出流过滤器类的超类
GZIPOutputStream
这个 java.util.zip 包中的类,使用 GZIP 格式压缩写入其中的内容
然后输出
ObjectOutputStream
向一个 OutputStream 写入二进制形式的 java 对象和基本类型,这个类用来序列化
对象。
PipedOutputStream
将字节写入与他连接的 PipedInputStream 中,在多线程程序中使用
PrintStream
写入文本形式的 java 对象和基本类型,不推荐使用 PrintStream ,使用 PrintWriter 代替
ZipOutputStream
这个 java.util.zip 包中的类压缩 ZIP 文件中的数据
------------------------------------------------------------
字符输出流
BufferedWriter
为提高效率将字符按缓冲区输出,仅当缓冲区满时才将字符写往输出流。
CharArrayWriter
向字符数组中写入字符
FileWriter
向文件中顺序写入字符,它是 OutputStreamWriter 的一个子类,能自动创建
一个FileOutputStream.
FilterWriter
字符输出流过率器类的超类
OutputStreamWriter
将字符写入字节输出流,使用默认编码方式或指定编码方式将字符转化成字节。
PipedWriter
将字符写入他连接的 PipedReader 中,在多线程程序中用到
StringWriter
将字符顺序写入一个内部创建的 StringBuffer 中
PrintWriter
在Writer 中写入文本形式的 Java 对象和基本类型
Writer
字符输出流的超类
----------------------
文件 copy 的 例子 代码
/**
* io 例子,文件copy 的一个类,加入了相关检验
*/
package cn.lokvin.examples.io;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
/**
* @author lokvin
*
*/
public class FileCopy {
/**
* @param args
*/
public static void main(String[] args) {
if(args.length != 2)
System.err.println("Usage: java FileCopy <source> <destination>");
else {
try {
copy(args[0], args[1]);
}catch(IOException ex) {
System.err.println(ex.getMessage());
}
}
}
/**
* 文件复制的静态方法,复制前进行检查
* @param from_name
* @param to_name
*/
public static void copy(String from_name, String to_name) throws IOException {
File fromFile = new File(from_name);
File toFile = new File(to_name);
//确定源文件存在,可读
if(!fromFile.exists()) {
abort("no such source file: " + from_name);
}
if(!fromFile.canRead()) {
abort("source file is unreadble: " + from_name);
}
//如果目标是目录,用源文件名命名目标
if(toFile.isDirectory()) {
toFile = new File(toFile, fromFile.getName());
}
if(toFile.exists()) {
if(!toFile.canRead()) {
abort("destination file is unreadble: " + to_name);
}
// 询问是否覆盖
System.out.println("Overwrite existing file " + toFile.getName() +
" ? (Y/N):");
System.out.flush();
//获得用户响应
BufferedReader in = new BufferedReader
(new InputStreamReader(System.in));
String response = in.readLine();
if(!response.equalsIgnoreCase("y")) {
abort("existing file was not overwritten. ");
}
}
else {
String parent = toFile.getParent();
if(parent == null) {//如果不存在,使用当前目录
parent = System.getProperty("user.dir");
}
File dir = new File(parent);
if(!dir.exists()) {
abort("destination directory doesn't exist: "+ parent);
}
if(dir.isFile()) {
abort("destination is not a directory: " + parent);
}
if(!dir.canRead()) {
abort("destination dir is unwirteable: " + parent);
}
}
//到此说明一切正常
FileInputStream fromStream = null;
FileOutputStream toStream = null;
try{
fromStream = new FileInputStream(fromFile);
toStream = new FileOutputStream(toFile);
byte[] buffer = new byte[4096];
int bytes_read;
while((bytes_read = fromStream.read(buffer)) != -1 ){
toStream.write(buffer, 0, bytes_read);
}
}
finally {
if(fromStream != null) try{fromStream.close(); } catch(IOException ex) {}
if(toStream != null) try {toStream.close();} catch(IOException ex) {}
}
}
private static void abort(String msg) throws IOException{
throw new IOException("FileCopy: " + msg);
}
}
分享到:
相关推荐
Qt/C++使用小记9【使用UDP创建连接发送消息/传输单个文件】
这份"java小记.rar"压缩包很可能包含了作者多年从事Java Web开发的经验总结,可能包括代码示例、笔记、最佳实践等内容。 在Java Web开发中,Servlet是核心部分,它是一个Java类,用于扩展服务器的功能,处理HTTP...
序列化是将一个对象的状态转换为字节流,以便存储或在网络中传输。当一个类实现了`Serializable`接口,该类的对象就可以进行序列化。然而,并非所有的类属性都需要被序列化,这就是`transient`关键字发挥作用的地方...
时间和日期中常用到的几个类: java.util.Date, java.util.Calendar, java.util.GregorainCalendar, java.text.DateFormat, java.text.SimpleDateFormat
Java 调用C或C++动态链接库(DLL)主要依赖于Java Native Interface (JNI) 技术。JNI 是Java平台的一部分,它允许Java代码和其他语言写的代码进行交互。以下是一个详细的步骤来说明如何使用JNI调用C或C++的动态链接...
- **输入/输出框**:平行四边形,表示数据的输入或输出操作。 - **判断框**:菱形,表示条件判断。 - **连接箭头**:表示控制流的方向。 ### 二、常见流程控制结构 #### 1. 顺序结构 顺序结构是最简单的流程控制...
2. **JNI(Java Native Interface)**:由于考勤机可能需要调用C或C++编写的本地库,因此开发者需要了解如何在Java代码中使用JNI来调用这些库,实现跨语言交互。 3. **数据解析**:考勤机返回的数据通常是二进制...
8. **IO和NIO**:JAVA的IO库提供了处理输入输出的方法,而NIO(New IO)引入了非阻塞I/O,提升了效率,适用于高并发场景。 9. **反射机制**:JAVA反射允许在运行时检查类的信息,创建和操作对象,对于理解和使用第...
《国内工作流产品分析小记》是一篇由胡长城(笔名银狐999)撰写,深入探讨了中国国内工作流产品现状的文章。作者基于自身丰富的行业经验和敏锐的洞察力,对当时市场上的工作流产品进行了详尽的分析与评价,重点关注...
### Jquery AutoComplete组件+Ajax实现搜索框输入提示功能详解 #### 前言 在当前Web应用开发中,提供良好的用户体验是至关重要的。本文主要介绍如何使用Jquery AutoComplete组件与Ajax技术来实现搜索框的实时输入...
2. **X轴映射**:假设输入域是30个日期数据,输出范围是[0-800px]的区间。使用线性比例可以将每个日期映射为具体的x坐标。 3. **Y轴映射**:同样,输入域是30个股票价格,输出范围是[0-600px]的区间。使用线性比例...
在本项目中,我们将探索如何利用Linux操作系统,Java编程语言,Python3,NumPy库以及STL文件格式来实现3D打印技术。这是一个跨学科的综合应用,涉及到计算机科学、软件开发以及制造技术。 首先,Linux是开源的操作...
将目前国内工作流产品厂商进行了简单的分析、整理 以前的资料,还有参考价值
环境: Linux s12084 2.6.9-67.ELsmp #1 SMP Wed ...小记一下。以备以后参考。 boost 库做得真好。在windows 平台, linux 平台下编译都很顺利。hp aCC 也宣称对 boost 1.35 完全支持 。 全部编译是很痛苦的过程
auto v = compose(2, 3.14); // v 的类型是 double ``` #### 三、Nullptr 关键字 - **定义**:`nullptr`是`std::nullptr_t`类型的一个值,专门用于表示空指针。 - **优势**: - 明确地表示“空”,增强了代码的...
在“android开发小记”这个主题中,我们可以深入探讨Android应用程序开发的相关知识,特别是通过查看提供的压缩文件中的代码示例。这些文件名如lesson_8_code.zip至lesson_20_codel.zip,以及不同的Mp3Player版本,...
目錄Java基础篇基础鎖多线程并发对象JVMJVM内存结构堆和差Java内存模型垃圾回收Java对象模型热点虚拟机性能监控与故障处理工具类加载机制Linux、IOLinux基础输入输出確保概要理论数据结构与算法RedisRedis 基础redis...
2. 数据库连接:`getConnection()`方法用于创建到数据库的连接,其中的`jdbc:mysql://localhost:3306/diancai_db`是URL格式,`localhost`是服务器地址,`3306`是MySQL的标准端口号,`diancai_db`是数据库名称。...
《Xstream使用小记》 Xstream是一款Java库,它提供了简单且强大的方式来序列化和反序列化Java对象到XML,以及从XML回转换为Java对象。在本文中,我们将深入探讨Xstream的核心概念、使用场景以及如何通过实例进行...