1.内存操作流,ByteArrayInputStream和 ByteArrayOutputStream
案例:将小写转化为大写
/*
* 内存操作流,将大写字母转化为小写字母(ByteArrayInputStream和 ByteArrayOutputStream)
*/
public static void ChangeLowLetterToBigLetter() throws IOException{
String str="he who has a dream is a true man";
//直接 将字符串转化为字节数组,放到内存中
ByteArrayInputStream in=new ByteArrayInputStream(str.getBytes());
//out是直接取得内存中的字节数组
ByteArrayOutputStream out=new ByteArrayOutputStream();
int count=0;
int temp=0;
//从内存中一个一个的读字节
while((temp=in.read())!=(-1))
{
char ch=(char)temp;
//转化为大写,直接写到内存中
out.write(Character.toUpperCase(ch));
}
System.out.println(out.toString()); }
注意:这里一个ByteArrayInputStream对应一个ByteArryOutputStream ,通过每次读取一个字节的方式,能够很好的控制输入输出
内容操作流一般使用来生成一些临时信息采用的,这样可以避免删除的麻烦。
/**
* @param args
* 2.管道流 管道流主要可以进行两个线程之间的通信。
* PipedOutputStream 管道输出流 起点
* PipedInputStream 管道输入流 终点
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Send send=new Send();
Recive revice=new Recive(); try{
//管道接受流实例和管道发送流实例连接
revice.getIn().connect(send.getOut());
}
catch(Exception e)
{
e.printStackTrace();
}
//开启两个线程
new Thread(send).start();
new Thread(revice).start();
} } //发送管道流
class Send implements Runnable {
private PipedOutputStream out = null; public Send() {
this.out = new PipedOutputStream();
}
public PipedOutputStream getOut()
{
return this.out;
} @Override
public void run() {
// TODO Auto-generated method stub
String str=" he who has a dream is a true man";
try
{
out.write(str.getBytes());
}
catch(Exception ex)
{
ex.printStackTrace();
}
try{
out.close();
}
catch(Exception ex)
{
ex.printStackTrace();
}
} } /*
* 接受管道
*/
class Recive implements Runnable
{
private PipedInputStream in=null;
public Recive()
{
in =new PipedInputStream();
} public PipedInputStream getIn() {
return this.in;
}
@Override
public void run() {
// TODO Auto-generated method stub
try
{
int len;
byte[] all=new byte[1024];
len=in.read(all);
System.out.println("success:"+new String(all,0,len));
}
catch(Exception e)
{
e.printStackTrace();
}
} }
二.打印流
/*
*1 .打印流
* Printstream
* 直接打印到对应的文件,格式化输出
*/
public static void PrintStreamTest() throws IOException
{
String filePath="G:"+File.separator+"JAVA"+File.separator+"test"+File.separator+"aaa.txt";
PrintStream printStram=new PrintStream(filePath);
//下面的方法也能创建一个打印流实例
//PrintStream printS=new PrintStream(new FileOutputStream(filePath));
//直接打印到文件
printStram.println("nihaoma");
printStram.println("你妹没的");
//下面是格式化输出
String name="jackvin";
String age="12";
printStram.printf("name:%s \t age:%s",name,age); printStram.close(); }
结果:
nihaoma
你妹没的
name:jackvin age:12
二:system.out,system.in,system.err 重定向
/*
* system.out 重定向,直接写文件
*/
public static void SystemOutReDirector() throws IOException
{
String filePath="G:"+File.separator+"JAVA"+File.separator+"test"+File.separator+"aaa.txt"; System.out.println("show in console");
File file=new File(filePath); PrintStream ps=new PrintStream(new FileOutputStream(file));
//将out定义成PrintStream,直接向文件中写入
System.setOut(ps);
//写文件
System.out.println("this sentence will show in the txt"); } /*
* system.err重定向,直接写文件
*/
public static void SysErrReDirector()
{
String filePath="G:"+File.separator+"JAVA"+File.separator+"test"+File.separator+"aaa.txt";
System.err.println("show in the console");
try
{
PrintStream ps =new PrintStream(filePath);
System.setErr(ps);
}
catch(Exception ex)
{
ex.printStackTrace();
}
System.err.println("show in the txt"); } /*
* system.in重定向,直接从文件中读取
*/
public static void SysInReadFromFile() {
String filePath="G:"+File.separator+"JAVA"+File.separator+"test"+File.separator+"bbb.txt";
try {
//定义一个输入流对象
InputStream in=new FileInputStream(filePath);
//修改system.in的读入方式
System.setIn(in);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
byte[] all=new byte[1024];
int count=0;
int temp=0;
try {
while((temp=System.in.read())!=(-1))
{
all[count++]=(byte)temp;
} } catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
System.out.println(new String(all,0,count)); }
三:Scanner类,直接读取文件,输出到console
/*
* Scanner类,直接读取文件输出到控制台
*/
public static void scannerTest() {
String filePath="G:"+File.separator+"JAVA"+File.separator+"test"+File.separator+"bbb.txt";
try {
Scanner scanner =new Scanner(new File(filePath));
while(scanner.hasNextLine())
{
System.out.println(scanner.nextLine());
} System.out.println("sfsf"); } catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
} }
四:DataOutputStream 和DataInputStream
/*
* DataOutputStream 输出流
*/
public static void dataOutputStream()
{
String filePath="G:"+File.separator+"JAVA"+File.separator+"test"+File.separator+"bbb.txt";
try {
//定义一个DataOutputStream 对象
DataOutputStream out=new DataOutputStream(new FileOutputStream(filePath)); String str="hi,this is DataOutputStream write";
out.write(str.getBytes());
System.out.println("dataoutput sucess!"); } catch (Exception e) {
// TODO: handle exception
}
}
/*
* DataInputStream 输入流,将DataOutStream 输入到文件的内容,写到控制台
*/
public static void dataInputStreamTest() {
String filePath="G:"+File.separator+"JAVA"+File.separator+"test"+File.separator+"bbb.txt";
try {
DataInputStream in=new DataInputStream(new FileInputStream(filePath));
byte[] all=new byte[1024];
int count=0;
int temp=0; while((temp=in.read())!=(-1))
{
all[count++]=(byte)temp;
}
System.out.println(new String(all,0,count)); } catch (Exception e) {
// TODO: handle exception
}
五:合并流 SequenceInputStream
/*
*合并流 SequenceInputStream
*/
public static void sequenceInputStreamTest()
{
String filePathA="G:"+File.separator+"JAVA"+File.separator+"test"+File.separator+"bbb.txt";
String filePathB="G:"+File.separator+"JAVA"+File.separator+"test"+File.separator+"aaa.txt";
try {
InputStream inA=new FileInputStream(filePathA);
InputStream inB=new FileInputStream(filePathB); SequenceInputStream sequenceInputStream=new SequenceInputStream(inA,inB);
byte [] all=new byte[1024];
int count=0;
int temp=0;
while((temp=sequenceInputStream.read())!=(-1))
{
all[count++]=(byte)temp;
} System.out.println(new String(all,0,count)); // sequenceInputStream.read(all); 如何不是一个一个字节的访问,输出的只是inB读入的文字
// System.out.println(new String(all));
inA.close();
inB.close(); } catch (Exception e) {
// TODO: handle exception
}
}