io流技术java_技术文章-java中的IO流

1.File类

Java中对文件有操作时,可以实例化一个File对象,将文件路径利用这样的形式赋给File对象。

File f = new File(filePath);

File类的基本操作包括:

判断是否存在:f.exists()

获取文件名:f.getName()

获取其绝对路径:f.getAbsolutePath()

但是如果涉及文件的查看与存储,就要利用IO的输入和输出流进行操作。

2.输入流:

常用的有InputStream类。

对于txt类文件查看的操作如下:

// 创建输入流

InputStream input = new FileInputStream(file);

// 开辟一块存储读入数据的缓存区域

byte[] contentBytes = new byte[input.available()];

// 读取所有的字节到缓存中

for (int i = 0; i < contentBytes.length; i++) {

contentBytes[i] = (byte) input.read();

}

// 根据字节数组创建字符串

content = new String(contentBytes);

// 关闭流

input.close();

这样就将txt文件中的内容通过输入流存入到名为content的字符串中,可以利用java进行下一步操作。

但是输入流只解决了查看等问题,如果要利用java改变txt文档中的内容,并存储到原来的txt中,就要采用输出流。

4.输出流:

常用的有OutputStream类等。

以改变txt文档中的内容再将其存储到原来的文档中为例,步骤参考输入流如下:

//创建输出流

OutputStream output = new FileOutputStream(file);

//创建一个用来存储读取字符串数据的数组

byte[] contentBytes = new byte[content.getBytes().length];

//将存储在字符串里的数据存入字节数组

contentBytes = content.replaceAll("\n", "\r\n").getBytes();

//因为OutputStream中的写出方法只能接收字节类型或者整型数据

output.write(contentBytes);

//刷新输出流,写出所有还在缓存中的字节

output.flush();

//关闭流

output.close();

例如如何制作一个文件查找器:

1.设计并制作出一个界面,其中包括最基本的输入文件路径框、搜索按钮、显示查找到的文件列表框。

2.利用读取的输入文件路径,创建一个File类对象。再创建一个File类型的动态数组,准备将符合对象的所有文件存入其中用来输出。创建一个数组,将读取到的f文件对象下所有的文件列表存入其中。

List files = new ArrayList();

File f = new File(filePath);

File[] fl = f.listFiles();

3.将File对象进行判断是否存在、判断是文件夹还是文件等操作,如果是文件夹,则将该文件夹再次调用文件查找的方法FileSearch(String filePath)。将读取到的文件存入files动态数组中。

for (int i = 0; i < fl.length; i++) {

if (fl[i].isDirectory()) {

for (File child1 : FileSearch(fl[i].getAbsolutePath()))

{

files.add(child1);

}

}

}

for

(File child1 : fl) {

files.add(child1);

}

4.在搜索结果框中输入得到的files动态数组中元素的绝对路径。

for (File child : FileSearch(fp)) {

if

(flag == false) {

jtextarea.setText(child.getAbsolutePath());

}

}

5.加入文件名搜索功能:

新增一个文本框用来输入文件名,将得到的文件名与fl中列举的文件名进行比较,符合要求的才加入到files动态数组中用来显示。

if (fl[i].getName().contains(fn) &&

!fn.equals("")) {

files.add(fl[i]);

}

6.加入点击结果列表中的文件就能打开的功能:

1.普通的JTextArea不支持点击返回点击选项的功能,所以要利用JList组件。JList中存入的数据为Vector类型,故需要一个Vector动态数组来存储得到的files动态数组。

Vector list = new

Vector();

for

(File child : FileSearch(fp)) {

list.addElement(child.getAbsolutePath());

}

console.setListData(list);

打开选取的文件:利用监听器返回得到的显示在JList上的对象后,新建一个Desktop类用来打开选取的文件。使用open(文件名)的方法打开。

Desktop op = new Desktop();

op.open(filepath);

7.序列化与反序列化

什么是序列化?

一个对象产生之后实际上是在内存上开辟一个存储空间,方便存储信息。对象序列化,就是把对象变成二进制数据流的一种方法,方便保存和传输。

一个对象想被序列化,就需要继承Serialiazable接口。

Serialiazable接口没有任何方法,此接口是一个标识接口,标识具有某种能力。例如一个Person类的序列化标识:

import java.io.Serializable ;

public class Person implements

Serializable{

private static final long serialVersionUID

= 1L;       //版本声明

private

String name ;      // 声明name属性,但是此属性不被序列化

private

int age ;               // 声明age属性

public

Person(String name,int age){       // 通过构造设置内容

this.name

= name ;

this.age

= age ;

}

public

String toString(){  // 覆写toString()方法

return

"姓名:" + this.name + ";年龄:" + this.age

;

}

};

以后此对象就能被序列化为二进制的btye流。

ObjectOutputStream序列化对象

传入输出对象:ObjectOutputStream(ObjectStream o)

输出对象:writeObject(Object o)

public class SerDemo01{

public

static void main(String args[]) throws Exception {

File

f = new File("D:" + File.separator + "test.txt") ;        // 定义保存路径

ObjectOutputStream

oos = null ;    // 声明对象输出流

OutputStream

out = new FileOutputStream(f) ;    // 文件输出流

oos

= new ObjectOutputStream(out) ;

oos.writeObject(new

Person("张三",30)) ;     // 保存对象

oos.close()

;     // 关闭

}

};

ObjectInputStream反序列化对象

构造输入对象:ObjectInputStream(ObjectStream o)

从指定位置读取对象:readObject()

public class SerDemo02{

public

static void main(String args[]) throws Exception {

File

f = new File(“地址”) ;       // 定义保存路径

ObjectInputStream

ois = null ;        // 声明对象输入流

InputStream

input = new FileInputStream(f) ;        //

文件输入流

ois

= new ObjectInputStream(input) ;    // 实例化对象输入流

Object

obj = ois.readObject() ;        // 读取对象

ois.close()

;      // 关闭

System.out.println(obj)

;

}

};

序列化一组对象最好使用数组接收

public class SerDemo05{

public

static void main(String args[]) throws Exception{

Person

per[] = {new Person("张三",30),new Person("李四",31),

new

Person("王五",32)} ;

ser(per)

;

Object

o[] = (Object[])dser() ;

for(int

i=0;i

Person

p = (Person)o[i] ;

System.out.println(p)

;

}

}

public

static void ser(Object obj[]) throws Exception {

File

f = new File("D:" + File.separator + "test.txt") ;        // 定义保存路径

ObjectOutputStream

oos = null ;    // 声明对象输出流

OutputStream

out = new FileOutputStream(f) ;    // 文件输出流

oos

= new ObjectOutputStream(out) ;

oos.writeObject(obj)

;     // 保存对象

oos.close()

;     // 关闭

}

public

static Object[] dser() throws Exception {

File

f = new File("D:" + File.separator + "test.txt") ;        // 定义保存路径

ObjectInputStream

ois = null ;        // 声明对象输入流

InputStream

input = new FileInputStream(f) ;        //

文件输入流

ois

= new ObjectInputStream(input) ;    // 实例化对象输入流

Object

obj[] = (Object[])ois.readObject() ;      //

读取对象

ois.close()

;      // 关闭

return

obj ;

}

};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/259600.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

bootstrap-代码-内联代码

说明通过 <code> 标签包裹内联样式的代码片段示例<!DOCTYPE html> <html lang"zh-CN"><head><meta charset"utf-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"view…

java类似php魔术方法_PHP与类有关的几个魔术方法

与类有关的其他魔术方法序列化与反序列化技术含义&#xff1a;序列化&#xff1a;就是将一个变量所代表的“内存”数据&#xff0c;转换为“字符串”形式并持久保存在硬盘上的一种做法。反序列化&#xff1a;就是将序列化之后保存在硬盘上的“字符串数据”&#xff0c;恢复为其…

IIS ARR设置HTTP跳转到HTTPS

GUI Version - Select the website you wish to configure- In the “Features View” panel, double click URL Rewrite You will notice there are currently no rules configured for this site. Click “Add Rules…” in the Actions menu to the right of the “Features…

2013.7.15DAY2

今天自己做了炸土豆 吼吼~ 才知道鸡蛋和小麦粉一起弄成浆糊涂到土豆条上炸效果很好~不过做失败了一些啦 失败的就用青椒炒着吃。。。。 下午准备做冰品来着。。。结果快递都到了特别忙。。。就只弄了杯冰啤酒。。。 虐了两道水题&#xff0c;贴上代码。。过于水了。。。 Descri…

AutoCAD.NET API 最新(2012)教程下载及在线视频教程DevTV

Autodek最近发布了基于最新版的AutoCAD 2012的.net API开发教程。基本内容包括&#xff1a; Overview of .NETPlugin BasicsUser InteractionDatabase fundamentalsDictionariesUser InterfaceEventsInputPoint MonitorJigs现在就可以从AutoCAD开发者中心下载&#xff0c; 看图…

inherits java_JAVA内部类和组合的区别

Why inner classes?At this point you’ve seen a lot of syntax and semantics describing the way inner classes work, but this doesn’t answer the question of why they exist. Why did Sun go to so much trouble to add this fundamental language feature? Feedbac…

SQL Server里一些未公开的扩展存储过程

SQL Server里一些未公开的扩展存储过程 [转帖] 博客天地 www.inbaidu.comSQL Server里一些未公开的扩展存储过程 扩展存储过程&#xff08;xp&#xff09;是直接运行在SQL Server地址空间里的动态链接库&#xff0c;是通过使用SQL Server开放数据服务API&#xff08;SQL Server…

Linux技巧:一次删除一百万个文件最快方法

昨天&#xff0c;我看到一个非常有趣的删除一个目录下的海量文件的方法。这个方法来自http://www.quora.com/How-can-someone-rapidly-delete-400-000-files里的Zhenyu Lee。 他没有使用find 或 xargs&#xff0c;他很有创意的利用了rsync的强大功能&#xff0c;使用rsync –de…

install python_python install on windows 10

图 1官网2、下载安装包&#xff1a;图 2 Downloads – windows图 3选择版本图 4选择离线安装版本图 5保存下载文件—文件名自己可以修改可能有人看到windows 几个版本&#xff0c;对几个版本有迷惑的地方&#xff0c;解释图 6几个版本的差异说明文字解释&#xff1a;An e…

iOS开发常见错误

错误1&#xff1a; 1.1这种错误都是storyboard有问题 解决&#xff1a;当前storyboard的Custom Class是MJViewController&#xff0c;代码中MJViewController继承自UITableViewController。 而storyboard目前提供的是UIViewController&#xff0c;并没有为MJViewController提供…

windows bat 批处理 !vm 合并快播文件

今天简单的写了一个bat批处理文件 用来处理快播的p2p的文件&#xff0c;一般回事这样的目录 你可以下载如下代码 echo off for /r %%a in (.) do (echo %%acd %%acopy /b *.!mv test.rmvb ) pause保存为merge.bat&#xff0c;就可以执行了 代码解释&#xff1a; 扫描该目录下的…

sso接口的调用

之前一直想sso接口已经写好了&#xff0c;登录注册功能是怎么调用的呢&#xff1f;原来在登录注册的jsp页面实现的接口的调用&#xff0c;页面的校验和验证功能在jsp页面即可实现。 注册页面&#xff1a; <% page language"java" contentType"text/html; cha…

java js获取css方法_5种JavaScript和CSS交互的方法

原标题&#xff1a;5种JavaScript和CSS交互的方法随着浏览器不断的升级改进&#xff0c;CSS和Java之间的界限越来越模糊。本来它们是负责着完全不同的功能&#xff0c;但最终&#xff0c;它们都属于网页前端技术&#xff0c;它们需要相互密切的合作。我们的网页中都有.js文件和…

(转)Http协议经典详解

转自&#xff1a;http://blog.csdn.net/gueter/archive/2007/03/08/1524447.aspx Author :Jeffrey 引言 HTTP 是一个属于应用层的面向对象的协议&#xff0c;由于其简捷、快速的方式&#xff0c;适用于分布式超媒体信息系统。它于1990…

CentOS 同步时间

来源&#xff1a;http://www.ctusky.com/16/0497/ 用date查看系统当前时间&#xff0c;date -R 可查看时区。 CentOS 同步时间由ntp服务提供&#xff0c;可以用"yum install ntp -y"安装. 装完后运行命令 ntpdate cn.pool.ntp.org同步时间&#xff0c;然后hwclock -w…

[逆向][Writeup]ISG2015 flagfinder - .NET程序逆向

这个题目同样是一道.NET的逆向题&#xff0c;.NET的逆向方法在之前的博文中已经介绍过&#xff0c;这里不做重复的说明。本题的源程序可以在我的github上下载&#xff1a;https://github.com/gsharpsh00ter/reverse 0x01 逆向 flagfinder为.NET编译的PE文件&#xff0c;用dnSpy…

spring是如何管理 事务的

Spring提供的事务管理可以分为两类&#xff1a;编程式的和声明式的。编程式的&#xff0c;比较灵活&#xff0c;但是代码量大&#xff0c;存在重复的代码比较多&#xff1b;声明式的比编程式的更灵活方便。 1、传统使用JDBC的事务管理 以往使用JDBC进行数据操作&#xff0c;使用…

java 编译原理 字符串_Java编译原理(javac)

Java中的编译分为两个部分&#xff1a;源码文件编译成字节码文件(前端编译)字节码文件被虚拟机加载以后编译成机器码(后端编译)对于开发来说接触的一般都是第一个步骤也就是源码编译成字节码文件(class文件)&#xff0c;第二个步骤开发几乎不会接触&#xff0c;因为这是虚拟机在…

sql2012一段时间无法连接报53错误

2019独角兽企业重金招聘Python工程师标准>>> 解决方案 在sqlserver网络配置下的msqlserver协议下改将ip3改成如下图所示 转载于:https://my.oschina.net/u/2511906/blog/840373

ICE第三篇------一些疑难点

1 间接代理 参考http://blog.sina.com.cn/s/blog_53e8499c0100lkoo.html IceGrid用于支持分布式网络服务应用&#xff0c;一个IceGrid域由一个注册表&#xff08;Registry&#xff09;和任何数目的节点(Node)构成。注册表&#xff08;Registry&#xff09;和节点(Node)一起合作…