在io流中对文件的过滤|java的几种IO流读取文件方式

|

⑴ java io流对文件的增删改查

可以通过BufferedReader 流的形式进行流读取,之后通过readLine方法获取到的内容,之后通过if判断来实现在某些特定位置的查找、增加、删除、修改操作。举例:BufferedReader bre = null;OutputStreamWriter pw = null;//定义一个流try {String file = "D:/test/test.txt";bre = new BufferedReader(new FileReader(file));//此时获取到的bre就是整个文件的缓存流pw = new OutputStreamWriter(new FileOutputStream(“D:/test.txt”),"GBK");//确认流的输出文件和编码格式,此过程创建了“test.txt”实例while ((str = bre.readLine())!= null) // 判断最后一行不存在,为空结束循环{if(str.indexOf("排除")<0){//判断是否需要舍弃pw.write(str);//将要写入文件的内容,可以多次write}}bre.close();//关闭流pw.close();//关闭流解释:以上方法是实现的删除,if中的条件改变下,即可实现其余的功能。备注:文件流用完之后必须及时通过close方法关闭,否则会一直处于打开状态,直至程序停止,增加系统负担。

⑵ java中如何用io流删除一个文本中的数据

既然是想要删除文本中的所有数据,那就没有必要去删除了,因为还要判断一些乱七版八糟的东权西比较麻烦,直接调用新建的方法即可,新建的同时会删除掉原来的,这时你只需要将新建的文本文件写入空字符串就好了,代码如下:import java.io.File;import java.io.FileWriter;import java.io.IOException;File f = new File("C:/abc.txt");FileWriter fw = null;try {fw = new FileWriter(f);fw.write("");fw.close();} catch (IOException e) {e.printStackTrace();}

⑶ 关于io流的

可以将文件中的内容逐行读入内存中,放在一个char*数组中,然后对数组中的元素进行操作,最后再把数组中的内容重新写入到文件中。具体语句要看你用什么语言。用链表做的~~把文件名换成你的文件的路径就行了~~#include<iostream>#include<fstream>using namespace std;struct list{ char data[100]; list* next;};void main(){ ifstream fp("文件名"); list *head,*rear,*s; head=new list(); head->next=NULL; rear=head; while(fp.good()) { s=new list(); rear->next=s; rear=s; rear->next=NULL; fp.getline(rear->data,100); } s=head; while(s->next!=NULL) { if(!strcmp(s->next->data,"张三")) { if(s->next->next==NULL||s->next->next->next==NULL) { s->next=NULL; break; } else { s->next=s->next->next->next->next; break; } } s=s->next; } ofstream fpOut("文件名"); s=head; while(s->next!=NULL) { fpOut<<s->next->data<<endl; s=s->next; } fp.close(); fpOut.close(); delete head;}

⑷ java IO流,哪些是节点流,哪些是过滤流。

IO不是字节流跟字符流吗?根据处理数据类型的不同分为:字符流和字节流根据数据流向不同分为:输入流和输出流

⑸ 用java中的io流写入文件如何避免覆盖原来的内容求代码

用这个方法publicFileOutputStream(Stringname,booleanappend)throwsFileNotFoundException,将逻辑值append设为false时,写入的字节数据覆盖文本原来的内容,为ture是即追加到原来文本的末尾。覆盖原文本内容如:FileOutputStreamx=newFileOutputStream("文件全路径",false);throwsFileNotFoundException为抛出异常。

⑹ java的几种IO流读取文件方式

一、超类:

字节流: InputStream(读入流) OutputStream(写出流)

字符流: Reader(字符 读入流) Writer (字符写出流)

二、文件操作流

字节流: FileInputStream ,FileOutputStream

字符流: FileReader, FileWriter(用法与字节流基本相同,不写)

//1.指定要读 的文件目录及名称

File file =new File("文件路径");

//2.创建文件读入流对象

FileInputStream fis =new FileInputStream(file);

//3.定义结束标志,可用字节数组读取

int i =0 ;

while((i = fis.read())!=-1){

//i 就是从文件中读取的字节,读完后返回-1

}

//4.关闭流

fis.close();

//5.处理异常

//1.指定要写到的文件目录及名称

File file =new File("文件路径");

//2.创建文件读入流对象

FileOutputStream fos =new FileOutputStream(file);

//3.定义结束标志

fos.write(要写出的字节或者字节数组);

//4.刷新和关闭流

fos.flush();

fos.close();

//5.处理异常

三、缓冲流:

字节缓冲流: BufferedInputStream,BufferedOutputStream

字符缓冲流:BufferedReader ,BufferedWriter

缓冲流是对流的操作的功能的加强,提高了数据的读写效率。既然缓冲流是对流的功能和读写效率的加强和提高,所以在创建缓冲流的对象时应该要传入要加强的流对象。

//1.指定要读 的文件目录及名称

File file =new File("文件路径");

//2.创建文件读入流对象

FileInputStream fis =new FileInputStream(file);

//3.创建缓冲流对象加强fis功能

BufferedInputStream bis =new BufferedInputStream(fis);

//4.定义结束标志,可用字节数组读取

int i =0 ;

while((i = bis.read())!=-1){

//i 就是从文件中读取的字节,读完后返回-1

}

//5.关闭流

bis.close();

//6.处理异常

//1.指定要写到的文件目录及名称

File file =new File("文件路径");

//2.创建文件读入流对象

FileOutputStream fos =new FileOutputStream(file);

//3.创建缓冲流对象加强fos功能

BufferedOutputStream bos=new BufferedOutputStream(fos);

//4.向流中写入数据

bos.write(要写出的字节或者字节数组);

//5.刷新和关闭流

bos.flush();

bos.close();

//6.处理异常

四、对象流

ObjectInputStream ,ObjectOutputStream

不同于以上两种类型的流这里只能用字节对对象进行操作原因可以看上篇的编码表比照原理

ObjectOutputStream对象的序列化:

将java程序中的对象写到本地磁盘里用ObjectOutputStream

eg:将Person类的对象序列化到磁盘

创建Person类

注1:此类要实现Serializable接口,此接口为标志性接口

注2:此类要有无参的构造函数

注3:一旦序列化此类不能再修改

class Person implements Serializable{

public Person(){}

}

2.创建对象流对象

注:要增强功能可以将传入文件缓冲流

ObjectOutputStream oos =new ObjectOutputStream(

new FileOutputStream(new File("文件路径")));

3.写入对象 ,一般会将对象用集合存储起来然后直接将集合写入文件

List<Person> list =new ArrayList<>();

list.add(new Person());

…(可以添加多个)

oos.writeObject(list);

4.关闭流,处理异常

oos.flush();

oos.close();

五、转换流:

这类流是用于将字符转换为字节输入输出,用于操作字符文件,属于字符流的子类,所以后缀为reader,writer;前缀inputstream,outputstream;

注 :要传入字节流作为参赛

InputStreamReader: 字符转换输出流

OutputStreamWriter:字符转换输入流

//1.获取键盘输入的字节流对象

inInputStream in =Stream.in;

/*2.用转换流将字节流对象转换为字符流对象,方便调用字符缓冲流的readeLine()方法*/

InputStreamReader isr =new InputStreamReader(in);

/*5.创建字符转换输出流对象osw,方便把输入的字符流转换为字节输出到本地文件。*/

OutputStreamWriter osw =new OutputStreamWriter(newFileOutputStream(new File("文件名")));

/*3.现在isr是字符流,可以作为参数传入字符缓冲流中*/

BufferedReader br =new BufferedReader(isr);/*4.可以调用字符缓冲流br的readLine()方法度一行输入文本*/

String line =null;

while((line =br.readLine()){

osw.write(line);//osw是字符流对象,可以直接操作字符串}

注:InputStreamReader isr =new InputStreamReader(new "各种类型的字节输入流都行即是:后缀为InputStream就行");

OutputStreamWriter osw =new OutputStreamWriter(new"后缀为OutputStream就行");

六、区别记忆

1.对象流是可以读写几乎所有类型的只要是对象就行,而字节字符流,只能读写单个字节字符或者字节字符数组,以上没有读写字节字符数组的;注意对象流只有字节流!

2.字符和字节循环读入的结束条件int i=0; (i =fis.read())!=-1用字符数组复制文件(fr 读入流 ,fw写出流),字节流也是相同的用法

int i = 0; char[] c = new char[1024];

while((i = fr.reade()) !=-1)){

fw.write(c,0,i);

}

123456

3.对象流里面套缓冲流的情景:

new ObjectInputStream(new BufferedInputStream(new FileInputStream(new File(“文件路径”))));

4.记忆流及其功能的方法:

前缀表示功能,后缀表示流的类型;

比如说FileInputStream 前缀:File,表示操作的磁盘,后缀:intputstream,表示是字节输入流。

同理 FileReader:表示操作文件的字符流

ObjectInputStream :操作对象的字节输入流

5.拓展:获取键盘输入的字符的缓冲流的写法:

new BufferedReader(new InputStreamReader(System.in)));

将字节以字符形式输出到控制台的字符缓冲流的写法:

new BufferedWriter( new OutputStreamWriter(System.out))

⑺ java io流中装饰器和过滤器的区别

楼主应该是领会了java io的精神的。在我以前学java的时候,与节点流相对的叫做包装流。分类的依据就是节点流是直接操作IO节点如ByteArray, File, Socket等等,所以相应的InputStream/OutputStream就是节点流。包装流是在java IO 管道机制中用来处理节点流的其他流对象,像各种Reader, Writer, Printer等等。他们的作用是在节点流基本功能至上提供扩展的功能,就像你说的对象、图片、字符串等的对应特殊操作。java IO中还有另一种分类就是:字节流与字符流。字节流顾名思义就是直接操作byte二进制数据;字符流则直接操作文本数据。例如:ByteArrayInputStream, ObjectOutputStream等是字节流;BufferedReader, OutputStreamWriter等等是字符流。注意这个分类与上面节点流/包装流的分类不是互斥的,只是两种不同的分类体系。节点流通常都是字节流;而一个流对象可以既是包装流又是字符流,比如刚才说的OutputStreamWriter。其实流的各种分类只不过是使我们更方便的理解IO包中类或对象的组织方式而已。不一定非要死抠字面。B.T.W.楼主所说的装饰器应该与IO中使用频繁的Decorator模式有关。而过滤器可能只是包装流的不同说法。当然也不排除你的资料里它可能是有特指的,比如文件操作中的FileFilter等等。回答也有点长,请耐心看完,好吗?

⑻ 关于java中的io流

4、基本字节流类 4.1、FileInputStream和FileOutputStream 这两个节点流用来操纵磁盘文件。这些类的构造函数允许你指定它们所连接的文件。 要构造一个FileInputStream,所关联的文件必须存在而且是可读的。 如果你要构造一个FileOutputStream而输出文件已经存在,则它将被覆盖。 FileInputStream infile = new FileInputStream(”myfile.dat”); FileOutputStream outfile = new FileOutputStream(”results.dat”); 4.1、 BufferInputStream和BufferOutputStream 这些是过滤器流,它们可以提高I/O操作的效率。 4.3、 PipedInputStream和PipedOutputStream 管道流用来在线程间进行通信。一个线程的PipedInputStream对象从另一个线程的PipedOutputStream对象读取输入。 要使管道流有用,必须有一个输入方和一个输出方。 4.4、 DataInputStream和DataOutputStream 这些过滤器通过流来读写Java基本类 5、 基本字符流类 图阐述了Reader和Writer字符流的体系结构。 5.1、InputStreamReader 和 OutputStreamWriter 用于字节流与字符流之间的转换接口。 当你构造一个InputStreamReader或OutputStreamWriter时,转换规则定义了16位Unicode和其它平台的特定表示之间的转换。 InputStreamReader从一个数据源读取字节,并自动将其转换成Unicode字符。 如果你特别声明,InputStreamReade会将字节流转换成其它种类的字符流。 OutputStreamWriter将字符的Unicode编码写到输出流,如果你的使用的不是Unicode字符,OutputStreamWriter会将你的字符编码转换成Unicode编码。 5.2.、缓冲读者和作者 因为在各种格式之间进行转换和其它I/O操作很类似,所以在处理大块数据时效率最高。 在InputStreamReader和OutputStreamWriter的结尾链接一个BufferedReader和BufferedWriter是一个好主意。 记住对BufferedWriter使用flush()方法。 5.3、 使用其它字符转换 如果你需要从一个非本地(例如,从连接到一个不同类型的机器的网络连接读取)的字符编码读取输入, 你可以象下面这个程序那样,使用显式的字符编码构造ir=new InputStreamReader(System.in, “8859_1〃); 注:如果你通过网络连接读取字符,就应该使用这种形式。 否则,你的程序会总是试图将所读取的字符当作本地表示来进行转换,而这并不总是正确的。ISO 8859-1是映射到ASCII的Latin-1编码模式。

⑼ java 文件读写流

首先你要知道java的io流主要分两种,一种是字符流,另一种字节流,还有一种过滤流,这个不常用,暂且可以忽略。等你这些都掌握了,推荐你用nio包中的管道流。流的套用可以提升读写效率(这种方式只能是同类流的套用,比如字节流套用字节流),还有一种是字符流与字节流互相转换,转换通过一种叫做“桥转换”的类,比如OutputStreamWriter类。下面举个最基础的字节流例子: public void File(String file, String bak) { BufferedInputStream bis = null; BufferedOutputStream bos = null; try { byte[] bytes = new byte[1024]; bis = new BufferedInputStream(new FileInputStream(file));//BufferedInputStream会构造一个背部缓冲区数组,将FileInputStream中的数据存放在缓冲区中,提升了读取的性能 bos = new BufferedOutputStream(new FileOutputStream(bak));//同理 int length = bis.read(bytes); while (length != -1) { System.out.println("length: " + length); bos.write(bytes, 0, length); length = bis.read(bytes); } } catch (Exception e) { e.printStackTrace(); } finally { try { bis.close(); bos.close(); } catch (IOException ex) { ex.printStackTrace(); } } }字符流的用法:FileReader fr = new FileReader("D:\\test.txt");BufferedReader br = new BufferedReader(fr);或者PrintWriter pw = new PrintWriter(new FileWriter("D:\\test.txt"));…

⑽ IO流,文件流等等其中的流,指什么怎么理解

IO — I 是 Input,即输入,读, O 是 Output 即输出,写。IO流 指数据输入输出的流。数据传送是按顺序一个一个传递,如同流动。大部分输入输出是同设备打交道,例如磁带,磁盘,光盘,打印机,屏幕,扫描仪,喇叭等。文件流,从文件读入数据时的数据输入流,或向文件写数据时的数据输出流。输入输出除了同设备打交道外,也可以有别的方式,例如内部读写。常见的sscanf(..)就是从字符串里读入数据,sprintf(..),往字符串里写入数据。流 — 指与输入输出设备有关的数据的流动,也指流动的数据本身。


赞 (0)