读写是两个不同的分支,通常都是分开单独使用的。
可以通过BufferedReader 流的形式进行流缓存,之后通过readLine方法袜亏获取到缓存的内容。
BufferedReader bre = null
try {
String file = "D:/test/test.txt"
bre = new BufferedReader(new FileReader(file))//此时获取到的bre就是整个文件友好雹的缓存流
while ((str = bre.readLine())!= null) // 判断最后一行不存在,为空结束循环
{
System.out.println(str)//原样输出读到的内容
};
备注一: 流用完好帆之后必须close掉,如上面的就应该是:bre.close(),否则bre流会一直存在,直到程序运行结束。
可以通过“FileOutputStream”创建文件实例,之后过“OutputStreamWriter”流的形式进行存储,举例:
OutputStreamWriter pw = null//定义一个流
pw = new OutputStreamWriter(new FileOutputStream(“D:/test.txt”),"GBK")//确认流的输出文件和编码格式,此过程创建了“test.txt”实例
pw.write("我是要写入到记事本文件的内容")//将要写入文件的内容,可以多次write
pw.close()//关闭流
备注二:文件流用完之后必须及时通过close方法关闭,否则会一直处于打开状态,直至程序停止,增加系统负担。
在Java 语言中 提供了各种各样的输入输出流(stream) 使我们能够很方便的对数据进行 *** 作 其中 管道(pipe)流是一种特殊的流 用于在不同线程(threads)间直接传送数据 一个线程发送数据到输出管道 另一个线程从输入管道中读数据 通过使用管道 实现不同线程间的通讯 无需求助于类似临时文件之类的东西 本文在简要介绍管道的基本概念后 将以一个具体的实例pipeapp加以详细说明 .管道的创建与使用Java提供了两个特殊的专门的类专门用于处理管道 它们就是pipedinputstream类和pipeoutputstream类 Pipedinputstream代表了数据在管道中的输出端 也就是线程向管道读数据的一端 pipeoutputstream代表了数据在管道中的输入端 也就是线程向管道写数据的一端 这两个类一起使用可以提供数据的管道流 为了创建一个管道流 我们必须慎前首先创建一个pipeoutstream对象 然后 创建pipeinputstream对象 实例如下 pipeout= new pipedyoutstream()pipein= new pipedputsteam(pipepout)一旦创建了一个管道后 就可以象 *** 作文件一样对管道进行数据的读写 .演示程序 pipeapp应用程序由三个程序组成 主线程(pipeapp Java)及由主线程启动的两个二级线程(ythread Java和zthread Java) 它们使用管道来处理数据 程序从一个内容为一行一行 x 字母的 input txt 文件中读取数据 使用管道传输数据 第一次是利用线程ythread将数据 x 转换为 y 最后利用线程zthread将 y 转换为 z 之后 程序在屏幕上显示修改后的数据 主线程 (pipeapp Java)在main()方法中 程序首先创建一个应用对象 pipeapp pipeapp=new pipeapp()由于程序中流 *** 作都需要使用IOException异常处理 所以设置了一个try块 在try中 为了从源文件中读取数据 程序为 input txt 文件创建了一个输入流Xfileln :fileinputstream xfileln= new fileinputstream( input txt )新的输入流传递给changetoy()方法 让线程ythread能读取该文件 inputstream ylnpipe =pipeapp changetoy(xfileln)changetoy()方法创建将输入数伏告据 x 改变到 y 的线程ythread 并返回该线程的输入管道 inputstream zlnpipe = pipeapp changetoz(ylnpipe)changetoz()方法启动将数据从 y 改变到 z 的线程zehread 主程序将使用从changetoz()返回的输入管道 得到以修改的数据 然后 程序将管道输入流定位到datainputstream对象 使程序能够使用readline()方法读取数据 datainputstream inputstream = new datainputstream(zlnpiepe)创建了输入流以后 程序就可以以行一行的读取数据病显示在屏幕上 String str= inputstream readline()While(str!=null){system out println(str) str=inputstream readline()宽厅清} 显示完成之后 程序关闭输入流 inputstream close()changetoy()方法 changetoy()方法首先通过传递一个参数inputstream给datainputstream对象来定位资源的输入流 使程序能使用readline()方法从流中读取数据 datainputstream xfileln =new datainutstream(inputstream) 然后 changetoy()创建输出管道和输入管道 pipeoutstream pipeout = new pipeoutputstream()pipeinputstream pipeln = new pipedinputsteam(pipeout)为了能够使用println()方法输出修改的后的文本行到管道 程序将输出管道定位到printstream对象 printstream printstream = new printstream(pipeout)现在 程序可以创建将数据从x改变到y的线程 该线程是ythread类的一个对象 他传递两个参数 输入文件(xfileln)和输出管道(调用printstream) ythread ythread =new thread(xfileln printstream)之后 程序启动线程 changetoz()方法changetoz()方法与changetoy()方法很相似 他从changetoy()返回的输入流开始 datainputstream yfileln= new datainputstream(inputstream)程序创建一个新的管道 pipedoutstream pipeout = new pipedoutputstream()pipedinputstream pipeln = new pipedinputsream(pipeout )该线程通过这个新的管道发出修改后的数据(输入流pipeln )给主程序 源程序如下 ////pipeapp Java pipeapp的主应用程序//import Java io *class pipeapp{public static void main(string[] args){pipeapp pipeapp=new pipeapp()try{fileinputstream xfile =new fileinputstream( input txt )inputstream ylnpipe = pipeapp changetoy(xfileln)inputstream zlnpipe=pipeapp changetoz(ylnpipe)system out println()system out println( here are the results )system out pringln()datainputstream inputstream = nes datainputstream(zlnpipe)string str = inputstream readline()while (str!=null){system out println(str)str=inputstream readline()}inputstream close()}catch(exception e){system out println(e tostring())}}public inputstream changetoy(inputstream inputstream){try{datainputstream pipeout = new datainputsteam(inputstream)pipedoutstream pipeout = new pipedoutputstream()pipedlnsteam pipeln = new pipedlnputstream(pipeout)printstream printstream = new printstream(pipeout)ythread ythread = new ythread(xfileln printstream)ythread start()return pipeln}catch(exeption e){system out println(x tostring())}return null}public inputstream changetoz(inputstream inputsteam){try{datainputstream yfileln = new datainputstream(inputstream)pipeoutputstream pipeln = new pipedinputstream(pipeout )printrstream printstream = new printsteam(pipeout )zthread zthread = new zthread(yfileln printstream )zthread start()return pipeln }catch(exception e){system out println(e tostring())}return null}} Ythread类和Zthread类由于ythread类与zthread类基本一样 在此仅以ythread为例加以说明 Ythread的构造器接收两个参数 输入的文件和第一个管道的输出端 构造器存储这两个参数作为类的数据成员 Ythread(datainputstream xfileln pringstream printstream){this xfileln = xfilelnthis printstream = printstream} 线程通过run()方法来处理数据 首先读取一行数据 确保xstring不为空的情况下循环执行 string xstring = xfileln readline()每读一行数据 完成一次转换string ystring = xstring replace( x y )然后将修改后的数据输出到管道的输出端 prinstream prinrln(ystring)为了确保所有缓冲区的数据完全进入管道的输出端 pringstram flush()循环完成后 线程关闭管道输出流 pringstram close()ythread类的源程序如下 //ythread Java//import Java io *class ythread exteads thread{datainputstream xfilelnpringstream printstreamythread(datainputstream xfileln pringstream printstream){this xfileln = xfilelnthis printstream = printstream}public void run(){try{string xstring = xfileln readline()while(xstring!=null){string ystring= xstring replace( x y )printstream pringln(ystring)printstream flush()xstring= xfileln readline()}printstream close()}catch{ioexception e}{system out println(e tostring())}}} pipeapp应用程序使用microsoft visual j++ 编译 lishixinzhi/Article/program/Java/gj/201311/27508import java.io.BufferedReader
import java.io.BufferedWriter
import java.io.File
import java.io.FileOutputStream
import java.io.IOException
import java.io.InputStreamReader
import java.io.PipedInputStream
import java.io.PipedOutputStream
import java.io.PrintWriter
public class Day10A {
private BufferedReader br// 字符效率读陵戚取流
private BufferedWriter bw// 字符效率写出流
private PipedInputStream pis// 管道读取流
private PipedOutputStream pos// 管道输出流,
private byte[] readBytes// 读取缓冲区
private byte[] writeBytes// 写尺乱陵出缓冲区
private String path = "C:\\Users\\Administrator\\Desktop"
private File file = null
private FileOutputStream fos = null
Day10A() {
writeBytes = new byte[1024]
file = new File(path, "测试.txt")
try {
if (!file.exists()) {
file.createNewFile()
fos = new FileOutputStream(file)
} else {
fos = new FileOutputStream(file, true)
}
br = new BufferedReader(new InputStreamReader(System.in))
bw = new BufferedWriter(new PrintWriter(fos))
pis = new PipedInputStream()
pos = new PipedOutputStream()
pis.connect(pos)
} catch (IOException e) {
e.printStackTrace()
}
}
public static void main(String[] args) {
Day10A d = new Day10A()
d.readFunction()
d.writerFunction()
}
private void readFunction() {
new Thread(new Runnable() {
public void run() {
while (true) {
try {
for (String str = br.readLine()!str.contentEquals("over") str = br.readLine()) {
readBytes = str.getBytes()
pos.write(readBytes)
}
} catch (Exception e) {
}
break
}
try {
pos.close()
} catch (IOException e) {
e.printStackTrace()
}
}
}).start()
}
private void writerFunction() {
new Thread(new Runnable() {
@Override
public void run() {
try {
String str = ""
for (int 陪祥len = pis.read(writeBytes) len != -1 len = pis.read(writeBytes)) {
str = new String(writeBytes, 0, len)
bw.write(str + "\r\n")
bw.flush()
}
} catch (Exception e) {
}
}
}).start()
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)