- 浏览: 231194 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
hl174:
写的不错,赞一个
在Java中字节与十六进制的相互转换主要思想有两点 -
l540151663:
也是个好方法
String为空判断
Java中的流,可以从不同的角度进行分类。
按流的方向分:输入流和输出流。
按处理数据单位分:字节流和字符流。
按实现功能分:节点流和处理流。
输出流:
输入流:
字节流:一次读入或读出是8位二进制。
字符流:一次读入或读出是16位二进制。
字节流和字符流的原理是相同的,只不过处理的单位不同而已。后缀是Stream是字节流,而后缀是Reader,Writer是字符流。
字节流:处理字节数据的流对象。设备上的数据无论是图片或者dvd,文字,它们都以二进制存储的。二进制的最终都是以一个8位为数据单元进行体现,所以计算机中的最小数据单元就是字节。意味着,字节流可以处理设备上的所有数据,所以字节流一样可以处理字符数据。
节点流:直接与数据源相连,读入或读出。
直接使用节点流,读写不方便,为了更快的读写文件,才有了处理流。
处理流:与节点流一块使用,在节点流的基础上,再套接一层,套接在节点流上的就是处理流。
下面是java IO流的结构示意图:
字符流:
Reader:用于读取字符流的抽象类。
|---BufferedReader:从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。 可以指定缓冲区的大小,或者可使用默认的大小。大 多数情况下,默认值就足够大了。
|---LineNumberReader:跟踪行号的缓冲字符输入流。此类定义了方法setLineNumber(int)和getLineNumbner(),它们可分别用于设置和获取当前行号。
|---InputStreamReader:是字节流通向字符流的桥梁:它使用指定的 charset 读取字节并将其解码为字符。它使用的字符集可以由名称指定或显式给定,或者可以接受平台默认的字符集。
|---FileReader:用来读取字符文件的便捷类。此类的构造方法假定默认字符编码和默认字节缓冲区大小都是适当的。要自己指定这些值,可以先在 FileInputStream 上构造一个 InputStreamReader。
***************************************************************************
Writer:写入字符流的抽象类。
|---BufferedWriter:将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入。
|---OutputStreamWriter:是字符流通向字节流的桥梁:可使用指定的 charset 将要写入流中的字符编码成字节。它使用的字符集可以由名称指定或显式给定,否则将接受平台默认的字符集。
|---FileWriter:用来写入字符文件的便捷类。此类的构造方法假定默认字符编码和默认字节缓冲区大小都是可接受的。要自己指定这些值,可以先在 FileOutputStream 上构造一个 OutputStreamWriter。
****************************************************************************
字节流:
InputStream:是表示字节输入流的所有类的超类。
|--- FileInputStream:从文件系统中的某个文件中获得输入字节。哪些文件可用取决于主机环境。FileInputStream 用于读取诸如图像数据之类的原始字节流。要读取字符流,请考虑使用 FileReader。
|--- FilterInputStream:包含其他一些输入流,它将这些流用作其基本数据源,它可以直接传输数据或提供一些额外的功能。
|--- BufferedInputStream:该类实现缓冲的输入流。
**************************************************************************
OutputStream:此抽象类是表示输出字节流的所有类的超类。
|--- FileOutputStream:文件输出流是用于将数据写入 File 或 FileDescriptor 的输出流。
|--- FilterOutputStream:此类是过滤输出流的所有类的超类。
|--- BufferedOutputStream:该类实现缓冲的输出流。
流的操作规律:
1、明确源和目的。
数据源:就是需要读取,可以使用两个体系:InputStream、Reader;
数据汇:就是需要写入,可以使用两个体系:OutputStream、Writer;
2、操作的数据是否是纯文本数据?
如果是:数据源:Reader
数据汇:Writer
如果不是:数据源:InputStream
数据汇:OutputStream
3、虽然确定了一个体系,但是该体系中有太多的对象,到底用哪个呢?
明确操作的数据设备。
数据源对应的设备:硬盘(File),内存(数组),键盘(System.in)
数据汇对应的设备:硬盘(File),内存(数组),控制台(System.out)。
4、需要在基本操作上附加其他功能吗?比如缓冲。
如果需要就进行装饰。
/记住,只要一读取键盘录入,就用这句话。
BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(System.out));
下面是一个应用的例子:
[java] view plain copy
<span style="color:#000000;">import java.io.*;
import java.nio.CharBuffer;
import java.util.Scanner;
import org.junit.Test;
public class Test1 {
@Test
public void testFile() throws IOException {
File file1 = new File("D:/test");
file1.mkdir(); // 在D盘下创建test目录
File[] fileArr = file1.listFiles(); // 获取目录下的所有文件
for (File f : fileArr) { // 输出目录下的文件名
System.out.println(f.getName());
}
String str;
System.out.println("请输入需要复制的文件名:");
BufferedReader buf=new BufferedReader(new InputStreamReader(System.in));
str = buf.readLine();
if(str.equals("1.txt")){
new copyFile().copyTxt();
}
if(str.equals("1.jpg")){
new copyFile().copyJpg();
}
buf.close();
File[] fileArr2 = file1.listFiles(); // 获取目录下的所有文件
for (File f : fileArr2) { // 输出目录下的文件名
System.out.println(f.getName());
}
}
}
class copyFile {
public void copyTxt() throws IOException {
int number = 0;
File file1 = new File("D:/test/1.txt");
File file2 = new File("D:/test/2.txt");
BufferedReader bfRead;
BufferedWriter bfWrite;
bfWrite = new BufferedWriter(new FileWriter(file2));
char[] arry = new char[1024];
FileReader fRead = new FileReader(file1);
bfRead = new BufferedReader(fRead);
while ((number = bfRead.read(arry)) != -1) {
bfWrite.write(arry, 0, number);
}
bfWrite.close();
bfRead.close();
}
public void copyJpg() throws IOException {
File file1= new File("D:/test/1.jpg");
File file2= new File("D:/test/2.jpg");
FileInputStream bfRead=new FileInputStream(file1);;
FileOutputStream bfWrite=new FileOutputStream(file2);
try {
byte[] arry = new byte[1024]; // 定义数组,传递流之间的数据
int count = 0;
while((count = bfRead.read(arry)) != -1) {
bfWrite.write(arry, 0, count);
}
} catch (FileNotFoundException e) {
System.out.println("filenotfound");
} catch (IOException e) {
System.out.println("IoException");
}
bfWrite.close();
bfRead.close();
}
}
</span>
按流的方向分:输入流和输出流。
按处理数据单位分:字节流和字符流。
按实现功能分:节点流和处理流。
输出流:
输入流:
字节流:一次读入或读出是8位二进制。
字符流:一次读入或读出是16位二进制。
字节流和字符流的原理是相同的,只不过处理的单位不同而已。后缀是Stream是字节流,而后缀是Reader,Writer是字符流。
字节流:处理字节数据的流对象。设备上的数据无论是图片或者dvd,文字,它们都以二进制存储的。二进制的最终都是以一个8位为数据单元进行体现,所以计算机中的最小数据单元就是字节。意味着,字节流可以处理设备上的所有数据,所以字节流一样可以处理字符数据。
节点流:直接与数据源相连,读入或读出。
直接使用节点流,读写不方便,为了更快的读写文件,才有了处理流。
处理流:与节点流一块使用,在节点流的基础上,再套接一层,套接在节点流上的就是处理流。
下面是java IO流的结构示意图:
字符流:
Reader:用于读取字符流的抽象类。
|---BufferedReader:从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。 可以指定缓冲区的大小,或者可使用默认的大小。大 多数情况下,默认值就足够大了。
|---LineNumberReader:跟踪行号的缓冲字符输入流。此类定义了方法setLineNumber(int)和getLineNumbner(),它们可分别用于设置和获取当前行号。
|---InputStreamReader:是字节流通向字符流的桥梁:它使用指定的 charset 读取字节并将其解码为字符。它使用的字符集可以由名称指定或显式给定,或者可以接受平台默认的字符集。
|---FileReader:用来读取字符文件的便捷类。此类的构造方法假定默认字符编码和默认字节缓冲区大小都是适当的。要自己指定这些值,可以先在 FileInputStream 上构造一个 InputStreamReader。
***************************************************************************
Writer:写入字符流的抽象类。
|---BufferedWriter:将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入。
|---OutputStreamWriter:是字符流通向字节流的桥梁:可使用指定的 charset 将要写入流中的字符编码成字节。它使用的字符集可以由名称指定或显式给定,否则将接受平台默认的字符集。
|---FileWriter:用来写入字符文件的便捷类。此类的构造方法假定默认字符编码和默认字节缓冲区大小都是可接受的。要自己指定这些值,可以先在 FileOutputStream 上构造一个 OutputStreamWriter。
****************************************************************************
字节流:
InputStream:是表示字节输入流的所有类的超类。
|--- FileInputStream:从文件系统中的某个文件中获得输入字节。哪些文件可用取决于主机环境。FileInputStream 用于读取诸如图像数据之类的原始字节流。要读取字符流,请考虑使用 FileReader。
|--- FilterInputStream:包含其他一些输入流,它将这些流用作其基本数据源,它可以直接传输数据或提供一些额外的功能。
|--- BufferedInputStream:该类实现缓冲的输入流。
**************************************************************************
OutputStream:此抽象类是表示输出字节流的所有类的超类。
|--- FileOutputStream:文件输出流是用于将数据写入 File 或 FileDescriptor 的输出流。
|--- FilterOutputStream:此类是过滤输出流的所有类的超类。
|--- BufferedOutputStream:该类实现缓冲的输出流。
流的操作规律:
1、明确源和目的。
数据源:就是需要读取,可以使用两个体系:InputStream、Reader;
数据汇:就是需要写入,可以使用两个体系:OutputStream、Writer;
2、操作的数据是否是纯文本数据?
如果是:数据源:Reader
数据汇:Writer
如果不是:数据源:InputStream
数据汇:OutputStream
3、虽然确定了一个体系,但是该体系中有太多的对象,到底用哪个呢?
明确操作的数据设备。
数据源对应的设备:硬盘(File),内存(数组),键盘(System.in)
数据汇对应的设备:硬盘(File),内存(数组),控制台(System.out)。
4、需要在基本操作上附加其他功能吗?比如缓冲。
如果需要就进行装饰。
/记住,只要一读取键盘录入,就用这句话。
BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(System.out));
下面是一个应用的例子:
[java] view plain copy
<span style="color:#000000;">import java.io.*;
import java.nio.CharBuffer;
import java.util.Scanner;
import org.junit.Test;
public class Test1 {
@Test
public void testFile() throws IOException {
File file1 = new File("D:/test");
file1.mkdir(); // 在D盘下创建test目录
File[] fileArr = file1.listFiles(); // 获取目录下的所有文件
for (File f : fileArr) { // 输出目录下的文件名
System.out.println(f.getName());
}
String str;
System.out.println("请输入需要复制的文件名:");
BufferedReader buf=new BufferedReader(new InputStreamReader(System.in));
str = buf.readLine();
if(str.equals("1.txt")){
new copyFile().copyTxt();
}
if(str.equals("1.jpg")){
new copyFile().copyJpg();
}
buf.close();
File[] fileArr2 = file1.listFiles(); // 获取目录下的所有文件
for (File f : fileArr2) { // 输出目录下的文件名
System.out.println(f.getName());
}
}
}
class copyFile {
public void copyTxt() throws IOException {
int number = 0;
File file1 = new File("D:/test/1.txt");
File file2 = new File("D:/test/2.txt");
BufferedReader bfRead;
BufferedWriter bfWrite;
bfWrite = new BufferedWriter(new FileWriter(file2));
char[] arry = new char[1024];
FileReader fRead = new FileReader(file1);
bfRead = new BufferedReader(fRead);
while ((number = bfRead.read(arry)) != -1) {
bfWrite.write(arry, 0, number);
}
bfWrite.close();
bfRead.close();
}
public void copyJpg() throws IOException {
File file1= new File("D:/test/1.jpg");
File file2= new File("D:/test/2.jpg");
FileInputStream bfRead=new FileInputStream(file1);;
FileOutputStream bfWrite=new FileOutputStream(file2);
try {
byte[] arry = new byte[1024]; // 定义数组,传递流之间的数据
int count = 0;
while((count = bfRead.read(arry)) != -1) {
bfWrite.write(arry, 0, count);
}
} catch (FileNotFoundException e) {
System.out.println("filenotfound");
} catch (IOException e) {
System.out.println("IoException");
}
bfWrite.close();
bfRead.close();
}
}
</span>
发表评论
-
Connected to the target VM, address: '127.0.0.1:52445', transport: 'socket' 错误:
2018-01-16 17:23 4771把 C:\Program Files (x86)\JetBra ... -
activemq Unrecognized Windows Sockets error: 10106: Socket creation failed
2018-01-16 17:27 95930-Nov-2017 22:45:52.892 严重 [ma ... -
Twitter的分布式自增ID算法snowflake (Java版)
2017-04-06 10:59 552概述 分布式系统中, ... -
gd总结20170104
2017-01-04 12:13 3391:tree获取选中的值,天窗项目-告警列表 $(functi ... -
java调优20161229
2016-12-29 20:03 4431:尽量减少对变量的重复计算 明确一个概念,对方法的调用,即 ... -
java2,8,10,16进制转换
2016-12-19 19:34 501A、十进制转换其他 十进制转成二进制 Integ ... -
java 修饰符
2016-12-06 22:20 408Java中共有四种访问限制修饰符:private,public ... -
java集合总结20161203
2016-12-03 15:26 5181:list 有序集合,元素 ... -
java常用集合总结
2016-12-03 14:55 536java常用集合总结 1、线程安全 线程安全就是说多线程访 ... -
设计模式总结1
2016-12-03 14:50 5851:像上转型================= 1.1定义抽象 ... -
pinyin4j
2016-12-02 15:40 424package cn.com.iotrust.common.u ... -
JAVA泛型
2016-11-08 23:00 541泛型就是变量类型的参数化。在使用泛型前,存入集合中的元素可以是 ... -
Java常见集合的归纳总结
2016-11-08 21:58 504Java常见集合的归纳总结 首先来看看集合的关系: C ... -
maven总结20160925
2016-09-25 09:45 6741:安装后查看maven版本 mvn -version(或者 ... -
HTTP请求原理介绍
2016-09-20 19:19 618HTTP(HyperText Transfer Protoco ... -
post和get的区别
2016-09-10 22:35 4341. get是从服务器上获取数据,post是向服务器传送数据。 ... -
mysql 生成一个临时日历表
2016-08-26 13:32 1010begin declare indexdate DATE; s ... -
tomcat内存设置
2016-08-18 17:46 371tomcat内存设置 -------------------- ... -
页面图表显示
2016-08-05 11:15 5631:百度echarts http://echarts.baid ... -
java list 对象 值 排序
2016-07-29 14:41 741/** * 排序算法 */ public stati ...
相关推荐
JavaIO流学习总结 JavaIO流是Java语言中最基本的输入/输出机制,它提供了多种方式来读取和写入数据。下面是JavaIO流的学习总结。 一、 IO流的分类 IO流可以从不同的角度进行分类,包括: * 按流的方向分为:输入...
2022年的Java IO流学习总结主要涵盖以下核心知识点: 1. **流的概念**:流是数据传输的抽象概念,表示数据的流动方向,可以是从文件到内存,也可以是从键盘到屏幕。Java中的IO流分为两种基本类型,字节流(Byte ...
这是别人总结的很有实用价值的javaIO流教程。
Java IO流学习总结 Java IO流是Java平台中用于处理输入输出的重要机制,它提供了一种在各种数据源和目的地之间传输数据的方式。流的概念是一个抽象的字节序列,允许我们从数据源读取数据或者向接收端写入数据。在...
总结来说,Java IO流是一个庞大的体系,覆盖了从基础的文件操作到复杂的网络通信,理解并熟练掌握这一部分将极大地提升Java开发者的技能。通过学习和实践,开发者可以灵活地处理各种数据输入输出场景,为应用程序...
JAVA_IO流学习总结
本篇总结主要围绕Java IO流的基础概念、分类以及常用方法展开。 首先,Java IO流按照数据流动的方向可分为输入流(Input Stream)和输出流(Output Stream)。输入流负责从源(如文件、网络连接)读取数据,而输出...
以下是对Java IO流的详细总结: 一、流的分类 1. 按流的方向:Java IO流分为输入流(InputStream和Reader)和输出流(OutputStream和Writer)。输入流用于从数据源读取数据,而输出流则用于向目标位置写入数据。 ...
虽然本报告主要讨论了基础的IO流,但了解NIO也是Java IO学习的重要部分。 总之,Java IO流是处理输入输出的核心工具,理解字节流与字符流的区别、流的层次结构以及基本操作方法,对于进行文件读写、网络通信等任务...
Java IO流是Java平台中用于处理输入和输出的重要机制,它是数据在计算机内存与外部设备之间传输的桥梁。Java IO库包含了大量的类和接口,这些类可以被组织成层次结构,便于理解和使用。 首先,我们要了解流的概念。...
Java IO 流学习总结 Java IO 流是 Java 语言中最重要的 Input/Output 机制之一,通过流我们可以自由地控制文件、内存、IO 设备等数据的流向。流机制是 Java 及 C++中的一个重要机制。 一、什么是流? 流是字节...
### Java IO流学习总结 #### 一、Java中为什么提出流的概念? 在计算机科学中,数据经常需要在程序和外部设备之间传输。这些外部设备包括但不限于磁盘、网络连接甚至是键盘和屏幕。为了统一和简化这种数据交互的...
### JAVA IO流学习总结 #### 一、流的概念与分类 **流(Stream)**是一种抽象的概念,用来表示数据的有序集合,这些数据可以被连续读取或写入。在Java中,流是处理输入/输出(I/O)的核心机制,允许程序员以一种统一...