Java教程

本文主要是介绍流,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

文件流

 

 

 

 

 

 

 

 

 

 

 

import java.io.FileReader;

public class TestFile {
    public static void main(String[] args)throws Exception{
        FileReader f = new FileReader("D:\\b站马士兵java基础\\线程\\src\\com\\bzmsbxc\\Test1.java");
        int d;
        d = f.read();
        while(-1!=d){
            System.out.printf("%c",(char)d);
            d = f.read();
        }
        f.close();
    }
}

 

运行结果

 

 字符流和字节流的区别

 

 

 

 字符流

import java.io.FileReader;
import java.io.FileWriter;

public class TestFile {
    public static void main(String[] args)throws Exception{
        //字符流的输入
        FileReader f = new FileReader("D:\\b站马士兵java基础\\线程\\src\\com\\bzmsbxc\\Test1.java");
        //字符流的输出
        FileWriter ff = new FileWriter("D:\\西电\\计算机\\java\\x.txt");
        int d;
        d = f.read();//从f读写到d中
while(-1!=d){
            ff.write(d);//把d写入到ff
            d = f.read();
        }
        ff.flush();//刷新缓冲区
        f.close();
        ff.close();
    }
}

 

 字节流

import java.io.*;

public class TestFile {
    public static void main(String[] args)throws Exception{
        //字节流的输入
        FileInputStream f = new FileInputStream("D:\\b站马士兵java基础\\线程\\src\\com\\bzmsbxc\\Test1.java");
        //字节流的输出
        FileOutputStream ff = new FileOutputStream("D:\\西电\\计算机\\java\\x.txt");
        int d;
        d = f.read();
        while(-1!=d){
            ff.write(d);
            d = f.read();
        }
        ff.flush();//刷新缓冲区
        f.close();
        ff.close();
    }
}

 

 

 

 缓冲流

 

 

import java.io.*;

public class TestFile {
    public static void main(String[] args){
        try {
            //加缓冲区的字符流输入区(超级数据输入管道)效率更快
            BufferedReader f = new BufferedReader(new FileReader("D:\\b站马士兵java基础\\线程\\src\\com\\bzmsbxc\\Test1.java"));
            //加缓冲区的字符流输出区(超级数据输出管道)效率更快
            BufferedWriter ff = new BufferedWriter(new FileWriter("D:\\西电\\计算机\\java\\x.txt"));
            String str = null;
            while (null != (str = f.readLine())) {//读取一行字符,但会将读取的换行符自动丢弃,即返回的String对象中并不包括换行符
                ff.write(str);
                str = f.readLine();
                ff.newLine();//写入下一行
            }
            ff.flush();
            f.close();
            ff.close();
        }catch(Exception e){
            e.printStackTrace();
            System.exit(-1);
        }
    }
}

 内存分析

 数据流

 

 

 

 

import java.io.*;

/**
 * 把长整型数据放入字节数组,并读取
 */
public class TestData {
    public static void main(String[] args)throws Exception{
        //写入
        ByteArrayOutputStream b = new ByteArrayOutputStream();
        DataOutputStream d = new DataOutputStream(b);
        long m = 2345522;
        d.writeLong(m);

        byte[] by = b.toByteArray();//DataOutputStream 流中并没有toByteArray()方法,但是ByteArrayOutputStream 流中却有toByteArray()方法,
        //所以不可以把b 改为d,否则编译时会出错! ByteArrayOutputStream流中toByteArray()方法的含义,
        //摘自API“创建一个新分配的 byte 数组。其大小是此输出流的当前大小,并且缓冲区的有效内容已复制到该数组中”

        //读取
        ByteArrayInputStream bb = new ByteArrayInputStream(by);
        DataInputStream dd = new DataInputStream(bb);
        Long l = dd.readLong();
        d.flush();
        d.close();
        dd.close();
        System.out.println(l);

    }
}

 

内存分析

 printf流

 

 

 

 

 

 

 

 

 

方法一;
import java.io.*;

/**
 * 通过键盘向一个文件中写入数据,即把用户从键盘敲入的数据自动写入某个文件中,
 *     如果敲入的是exit,则程序终止
 */
public class TestPrintf {
    public static void main(String[] args) {
        String s = null;
        PrintStream p = null;
        BufferedReader b = null;
        try {
            b = new BufferedReader(new InputStreamReader(System.in));
            p = new PrintStream(new FileOutputStream("E:\\尚学堂\\第二阶段视频\\Printf\\java\\printf.txt"));
            while (null != (s = b.readLine())) {
                if (s.equalsIgnoreCase("exit")) {
                    break;
                }
                p.printf(s);
            }
            ;
            p.flush();
        } catch (Exception e) {
            System.exit(-1);
        } finally {
            try {
                b.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            p.close();
        }
    }
}

 

 

方法二:
import java.io.*;
/**
 * 通过键盘向一个文件中写入数据,即把用户从键盘敲入的数据自动写入某个文件中,
 *     如果敲入的是exit,则程序终止
 */
public class TestPrintWriter {
    public static void main(String[] args)
    {
        BufferedReader br = new BufferedReader(
                new InputStreamReader(System.in)
        );
        PrintWriter ps = null;
        try
        {
            ps = new PrintWriter(new FileWriter("d:/share/java/BB.java"));
            String strRec = null;

            while (null != (strRec=br.readLine()))  //记住: 如果直接输入回车的话, br.readLine() 返回的是""  而不是 null  或者讲:br.readLine()遇到回车符时终止读取,并且会把读取到的回车符自动丢弃掉
            {
                if (strRec.equalsIgnoreCase("exit"))
                    break;
                ps.println(strRec);
            }
            ps.flush();
        }
        catch (IOException e)
        {
            e.printStackTrace();
            System.exit(-1);
        }
        finally
        {
            ps.close();
        }
    }
}

 

/**
*将原本的System.out.println()打印在公屏上,通过setOut()和printfOutstream流转换成打印字节流文件上
/

public class TestSetSystemOut
{
    public static void main(String[] args)
    {
        PrintStream ps_out = null;
                
        try
        {
            ps_out = new PrintStream(new FileOutputStream("d:/share/ww.txt"));
            System.setOut(ps_out); //将System.out的值重新设置为ps_out,即System.out不在关联到显示器,而是关联到"d:/share/ww.txt"文件
            System.out.println(12); //这实际上是把12输出到了System.out所关联的d:/share/ww.txt中
            System.out.println(55.5);  //同上
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
        finally
        {
            try
            {
                ps_out.close();
            }
            catch (Exception e)
            {
                e.printStackTrace();
            }
            
        }
    }
}

 

/*
    功能: 将键盘输入的数据输入A文件中,如果输入有误,
           则把出错信息输出到B文件中
           
           标准输入输出流的重定向    
*/

import java.io.*;
import java.util.*;

public class TestSetOutErr
{
    public static void main(String[] args) 
    {
        PrintStream psOut = null;
        PrintStream psError = null;
        Scanner sc = null;
        
        
        try
        {
            psOut = new PrintStream("d:/Out.txt");//文件A
            psError = new PrintStream("d:/error.txt");//文件B
            sc = new Scanner(System.in);
            int num;
            System.setOut(psOut);
            System.setErr(psError);
            
            while (true)
            {
                num = sc.nextInt();
                System.out.println(num);//不能省                
            }    
        }
        catch (Exception e)
        {
            System.err.println("出错的信息是:");  //不可以写成System.out.println("出错的信息是:");
            e.printStackTrace();  //e.printStackTrace(); 默认是输出到System.err所关联的设备中
        }            
    }
}

 

Object流

 

 

 

 

import java.io.*;
**
 * 将对象写入字节流,再读取该对象(用另一个引用)然后打印该对象
 */
public class TestObjectIO
{
    public static void main(String[] args)
    {
        ObjectOutputStream oos = null;
        ObjectInputStream ois = null;
        Student ss = new Student("zhansan", 1000, 88.8f);  //注意88.8f不能改为88.8 
        Student ss2 = null;    
                
        try
        {
            FileOutputStream fos = new FileOutputStream("d:/share/java/ObjectOut.txt");
            oos = new ObjectOutputStream(fos);
            oos.writeObject(ss);
            
            ois = new ObjectInputStream(new FileInputStream("d:/share/java/ObjectOut.txt"));    
            ss2 = (Student)ois.readObject();  //(Student)不能省   ois.readObject();如果ois中的某个成员是transient,则该成员是不会被读取的,因为该成员不会被保存,何来读取之说?!
            
            System.out.println("ss2.sname = " + ss2.sname);
            System.out.println("ss2.sid = " + ss2.sid);
            System.out.println("ss2.sscore = " + ss2.sscore);
        }
        catch (FileNotFoundException e)
        {
            System.out.println("文件没有找到!");
            System.exit(-1);
        }
        catch (Exception e)
        {
            e.printStackTrace();
            System.exit(-1);
        }
        finally
        {
            try
            {
                oos.close();
                ois.close();
            }
            catch (Exception e)
            {
                e.printStackTrace();
                System.exit(-1);
            }
        }        
    }
}

 

这篇关于流的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!