- 浏览: 65592 次
- 性别:
- 来自: 广州
-
文章分类
最新评论
-
zuo_huai:
赞一个!!!
java多线程编程 -
zuo_huai:
呵呵……,不客气
使用common-fileupload 和common-io实现文件的上传和批量上传 -
lg_asus:
呵呵,不错的东东。多谢
使用common-fileupload 和common-io实现文件的上传和批量上传
1. 数据源
data source.提供原始数据的原始媒介。常见的:数据库、文件、其他程序、内存、网络连接、IO设备
2. 流的概念
数据源就像水箱,流就像水管中流着的水流,程序就是我们最终的用户。流是一个抽象、动态的概念,是一连串连续动态的数据集合。
3. java实现IO流的体系结构
4. 实现特定操作的流
1)对文件进行操作的流 FileOutputStream/FileInputStream , FileWriter/FileReader
FileInputStream用于读取诸如图像数据之类的原始字节流。要读取字符流,请考虑使用FileReader
。
available(): 并不是指定文件还有多少数据没有读,不然,如果是100g的大文件,返回得数就溢出了。不过,对于普通文件的话可以看做是剩余的未读数据。
返回下一次对此输入流调用的方法可以不受阻塞地从此输入流读取(或跳过)的估计剩余字节数。
FileOutputStream
用于写入诸如图像数据之类的原始字节的流。要写入字符流,请考虑使用FileWriter
。也就是说,处理文本的话使用字符流。
下面是一个实现文本文件复制功能的例子:
import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; public class FileCopyTools { /** * @param args */ public static void main(String[] args) { if(fileCopy(args[0],args[1])){ System.out.println("文件拷贝成功"); }else{ System.out.println("文件拷贝失败"); } } public static boolean fileCopy(String srcName, String destName){ File srcFile, destFile; // FileReader reader; // FileWriter writer; FileInputStream reader; FileOutputStream writer; boolean flag = false; try{ srcFile = new File(srcName); destFile = new File(destName); // reader = new FileReader(srcFile); // char[] buff = new char[100]; reader = new FileInputStream(srcFile); byte[] buff = new byte[100]; int len; StringBuffer strBuffer = new StringBuffer(); while((len = reader.read(buff)) != -1){ strBuffer.append(new String(buff,0,len)); } // writer = new FileWriter(destFile); // writer.write(strBuffer.toString()); writer = new FileOutputStream(destFile); writer.write(strBuffer.toString().getBytes()); flag = true; writer.flush(); reader.close(); writer.close(); }catch(FileNotFoundException e){ System.out.println("文件读取异常:= " + e.getMessage()); }catch(IOException e){ System.out.println("读取数据异常:= " + e.getMessage()); } return flag; } }
2) 实现对内存虚拟文件功能的流 ByteArrayOutputStream/ByteArrayInputStream, CharArrayWriter/CharArrayReader
ByteArrayInputStream
包含一个内部缓冲区,该缓冲区包含从流中读取的字节。内部计数器跟踪read
方法要提供的下一个字节。
FileInputStream是把文件当做数据源。ByteArrayInputStream则是把内存中的某个数组当做数据源。这个也就是实现了内存虚拟文件功能
ByteArrayOutputStream:
此类实现了一个输出流,其中的数据被写入一个 byte 数组。缓冲区会随着数据的不断写入而自动增长。可使用
toByteArray()
和 toString()
获取数据。 ByteArrayOutputStream将一个输出流指向一个Byte数组,但这个Byte数组是ByteArrayOutputStream内部内置的,不需要我们来定义。
注:不需要关闭流的,但是调用close也没有问题,close不做任何事情。因为ByteArrayOutputStream本身操作的是数组,并没有打开文件描述符之类的,所以不需要关闭。
将输入流的内容读入到一个数组中返回:
byte[] getBytesFromIS(FileInputStream fis){ ByteArrayOutputStream baos = null; int temp = 0; try { baos = new ByteArrayOutputStream();; while((temp=fis.read())!=-1){ baos.write(temp); } return baos.toByteArray(); //从而返回一个包含输入流所有内容的数组 } catch (IOException e) { e.printStackTrace(); return null; } }
3) 实现线程通信功能的流PipedOutputStream/PipedInputStream , PipedWriter/PipedReader
/** * 生产者线程 * @author * */ class Producer implements Runnable{ private PipedOutputStream out = new PipedOutputStream(); public PipedOutputStream getOut(){ return out; } public void run(){ String data = "hello! consumer!"; try { out.write(data.getBytes()); out.close(); } catch (IOException e) { System.out.println(e.getMessage()); } } } /** * 消费者线程 * @author * */ class Consumer implements Runnable{ private PipedInputStream in = new PipedInputStream(); public PipedInputStream getIn(){ return in; } public void run(){ byte[] buff = new byte[100]; int len; try { while((len = in.read(buff))!=-1){ String data = new String(buff,0,len); System.out.println("下列数据来自于生产者线程:= " + data); } in.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } public class PipedStream { /** * @param args */ public static void main(String[] args) { Producer producer = new Producer(); Consumer consumer = new Consumer(); PipedInputStream in = consumer.getIn(); PipedOutputStream out = producer.getOut(); try { in.connect(out); // 进行线程交互的方法 } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } new Thread(producer).start(); new Thread(consumer).start(); } }
4) 实现各种类型数据流读写功能的流 DataOutputStream/DataInputStream
FileOutputStream fos = null; DataOutputStream dos = null; FileInputStream fis = null; DataInputStream dis = null; try { fos = new FileOutputStream("data.txt"); BufferedOutputStream bos = new BufferedOutputStream(fos); dos = new DataOutputStream(bos); dos.writeInt(899); dos.writeDouble(1000.11); dos.writeBoolean(false); // dos.writeBytes("bytes"); // dos.writeChars("chars"); dos.writeUTF("utf"); dos.close(); fis = new FileInputStream("data.txt"); BufferedInputStream bis = new BufferedInputStream(fis); dis = new DataInputStream(bis); System.out.println(dis.readInt()); System.out.println(dis.readDouble()); System.out.println(dis.readBoolean()); System.out.println(dis.readUTF()); dis.close(); } catch (IOException e) { System.out.println(e.getMessage()); }
5) 实现缓存功能的流 BufferedOutputStream/BufferedInputStream , BufferedWriter/BufferedReader
6) 对象类型数据读写功能的流
7) 实现打印功能的流
8) 字节与字符转换功能的流 OutputStreamWriter/InputStreamWriter,OutputStreamReader/OutputStreamReader
示例代码如下: //接受用户的输入
BufferedReader bReader = null; try { System.out.println("名字:"); bReader = new BufferedReader(new InputStreamReader(System.in)); System.out.println("用户输入:"+bReader.readLine()); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }
9) 实现压缩功能的流ZipOutputStream/ZipInputStream
发表评论
-
java7-(fork-join) 的使用
2016-06-29 14:17 0public class ForkJoinTest { ... -
tomcat无法启动的问题 -Xss太小
2016-06-23 16:40 2978线上的tomcat 无法启 ... -
codis实现高可用的服务端架构
2016-01-11 11:03 0codis实现高可用的服务端架构 安装codis 用lv ... -
netty入门
2014-03-14 18:14 18771 阻塞IO ,阻塞异步IO,非阻塞异步IO 首先学习n ... -
SVN权限管理
2013-09-14 10:37 01.安装subversion 2.安装TortoiseS ... -
HIVE知识点
2013-08-21 20:35 0安装hive: 1.创建目录 ... -
HQL
2013-08-21 11:07 0select site, fr, count(sid) as ... -
Hbase微博系统
2013-05-02 11:38 0HBase是一个分布式的、面向列的开源数据库 HB ... -
由Word Count 得到的HDFS、map reducde
2013-05-02 10:57 0HDFS 设计目标: 大文件 一次写入,多次读取 普 ... -
新手在Centos 6 下mysql5.5.30下源码安装
2013-03-30 09:55 13641) 下载CentOS6,mysql5.5.30 源码包, ... -
Protocol Buffers的应用与分析将数据存储在Hbase中
2013-02-04 15:24 0ddd -
hbase整合hadoop,并在Window环境下连接hbase
2012-11-26 22:33 2976环境:redhat9 ,hadoop-1.0.4,hbase- ... -
hadoop中的问题总结
2012-11-18 22:39 1726在做hadoop例子中,Win7远程连接linux服务器上的h ... -
jconsole在windows和linux版本下的使用
2013-04-02 17:10 4184在WINDWO7 平台下使用jconsole: jcons ... -
JDK自带VM分析工具jps,jstat,jmap,jconsole
2012-10-22 22:03 0一、概述 Sun 的JDK中的几个工具,非 ... -
精通java正则表达式
2012-10-16 22:41 2272精通java正则表达式 1.正则表达式的作用 ... -
java实现文件的按照每次读取固定行数读取一个 文件 ,计算文件总行数和通过LINUX 命令读取固定行数文件内容,计算文件总行数
2012-06-27 22:50 46371 ) java实现文件的按照每次读取固定行数读取一个文件 ... -
[转载]VMWARE 虚拟机连接主机,或被其他网内的机器访问
2012-04-12 12:24 2577原文:http://blog.sina.com.cn/s/bl ... -
JVM内存设置(转)
2012-02-07 09:23 1971对于jvm的设置我一直知道的很少,有时候遇到outOfM ... -
利用Java和Java IDL创建CORBA应用
2012-01-07 22:44 2939CORBA基本介绍 CORBA ...
相关推荐
【Java IO技术精髓】是Java开发中不可或缺的一部分,它涵盖了数据输入和输出的各种方式。Java IO的核心在于流(Stream),流分为两类:以字节为导向的流和以Unicode字符为导向的流。 1. **以字节为导向的流**主要...
Java I/O API之性能分析 IO API的可伸缩性对Web应用有着极其重要的意义。Java 1.4版以前的API中,阻塞I/O令许多人失望。从J2SE 1.4版本开始,Java终于有了可伸缩的I/O API。本文分析并计算了新旧I/O API在可伸缩性...
在Java编程语言中,`IO`(Input/Output)是...在处理大数据量文件时,理解并灵活运用这些Java IO技术至关重要。通过选择合适的流类型、使用缓冲、合理分块以及考虑异步和并发,可以有效地提高文件读取和处理的性能。
Java IO流技术是Java平台中用于处理输入输出的重要机制,其核心在于数据的传输,从数据源到程序或从程序到目的地。在Java中,流分为两大类:输入流(InputStream、Reader)和输出流(OutputStream、Writer)。输入流...
在这个"javaIO案例"中,我们关注的是如何使用核心的Java IO类,如`InputStream`、`OutputStream`、`FileInputStream`、`FileOutputStream`以及`PipedInputStream`和`PipedOutputStream`等管道流。这些类构成了Java ...
《Java IO.chm》是一个关于Java输入/输出(IO)技术的压缩文件,其中包含了丰富的资料,适合开发者深入理解和学习Java IO系统。这篇详细的总结将围绕Java IO体系结构、核心类、流的概念、缓冲区、转换流、字符集、...
本文档全面总结了Java IO的各种操作,旨在为开发者提供一个深入理解并熟练掌握Java IO技术的资源。 #### 一、临时文件创建与管理 在Java中,可以轻松地创建和管理临时文件,这主要依赖于`java.io.File`类提供的...
总的来说,本图书管理系统展示了如何利用Java IO技术在控制台环境下实现数据的存取,通过三层架构设计实现了业务逻辑和数据操作的分离,提高了系统的稳定性和可维护性。这种实践对于学习Java编程以及理解软件架构...
《Java GUI与IO技术在学生管理系统中的应用》 在信息技术领域,开发一款学生管理系统是常见的实践项目,它有助于教育机构高效地管理学生的相关信息。本文将深入探讨如何利用Java的图形用户界面(GUI)和输入/输出...
教授教学课件java-IO.ppt (精华)
在“JavaIODemo”这个示例中,可能会包含以上提到的一些或全部Java IO操作的代码实例,通过这些实例,我们可以学习如何在实际项目中应用Java IO API。实践是掌握Java IO的最佳方式,通过对这些示例的分析和运行,...
### Java IO操作详解 ...通过以上介绍,我们详细了解了Java IO操作中的一些基本概念和技术点,包括File类的使用、基本的输入输出流操作以及RandomAccessFile的使用等。这些知识对于进行文件读写操作至关重要。
在Java编程领域,IO(Input/Output)技术是不可或缺的一部分,尤其在处理数据持久化、文件操作、网络通信等方面发挥着重要作用。在这个“java小项目练习IO实现”中,我们将探讨如何利用Java的IO流来实现本地数据的...
Java IO流的精讲涵盖了许多概念和技术,包括流的分类、流的方向、缓冲区的使用、字符编码以及一些实用的IO类和方法。在实例开发中,我们将深入理解这些概念并应用到实际项目中。 首先,Java IO流按照数据传输的方向...
随着互联网应用的发展和技术的进步,传统的阻塞式IO已经不能满足高性能服务器的需求。为此,Java 1.4 版本引入了新的I/O处理方式——NIO,即New IO。NIO提供了一种基于通道(Channel)和缓冲区(Buffer)的新模型。 ...
### Java IO系统全面解析 #### 一、Java IO系统概述 ...无论是文件操作、网络通信还是对象序列化,Java IO系统都能提供合适的方法和技术支持。理解和掌握Java IO系统对于任何Java开发者来说都是非常重要的。
### Java IO处理详解 #### 一、概述 Java IO(Input/Output)是Java编程语言中用于处理输入输出操作的基础框架。它主要包括流(Streams)和文件系统(File System)的...希望本文能帮助您更好地理解和使用Java IO技术。
Java IO和NIO是Java平台中用于输入/输出操作的核心组件。这两个库为开发者提供了处理数据传输的强大工具,无论是在磁盘、网络还是内存中。本合集包含了两本关于这些主题的专业书籍——"Java IO"和"Java NIO",它们...
Java IO系统是Java平台中处理输入输出操作的核心组件,它为开发者提供了丰富的类库,用于读写文件、网络通信以及...学习和掌握这两个核心技术,对于Java开发人员来说至关重要,能大大提高其在实际项目中的工作效率。