Android 中各种文件输入输出流

这篇博客主要介绍了Android中文件输入流和输出流的使用,包括InputStream从HttpURLConnection获取数据,以及通过FileInputStream、BufferedInputStream和BufferedReader读取文件。在输出流方面,讲解了PrintWriter如何写入文件和服务器,使用FileOutputStream创建文件,BufferedOutputStream进行缓冲,以及PrintStream和BufferedWriter的用法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

0: 输入流

InputStream->HttpURLConnection.getInputStream

  ->getResource().openRawResource(R.raw.a);
  ->xmlPullParser.setInput(inputStream, "utf-8");
  ->xmlReader.parse(new InputSource(getResources().openRawResource(R.raw.worker)));
FileInputStream相对与InputStream 这个构造方法里面可以放地址
BufferedInputStream 里面的参数是InputStream,其实就是InputStream的缓存流,因为FileInputStream 集成了InputStream ,所以也可以放FileInputStream
-----------------------------------------------------------------------

BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(getCacheDir().getPath()+"/print.txt")));  



1:输出流

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
OutputStream->HttpURLConnection.getOutputStream
FileOutputStream相对于OutputStream 这个构造方法啊里面可以放地址:FileOutputStream fos = new FileOutputStream(getCacheDir().getPath()+"/1.bmp"); 
BufferedOutputStream bos =  new BufferedOutputStream(new FileOutputStream(getCacheDir().getPath()+"/3.bmp"));
-----------------------------------------------------------------------
PrintStream ps = new PrintStream(getCacheDir().getPath()+"/print.txt"); 
ByteArrayOutputStream bos = new ByteArrayOutputStream();

BufferedWriter bw = new BufferedWriter(new FileWriter(recordFile));  

PrintWriter pw = new PrintWriter(new FileWriter("qq.txt"),true);->服务器端的PrintWriter,直接就是文本,所以用字符输出流



+++++++++++++++++++++++++++++++++++++++++++++++++

0: 输入流

InputStream->HttpURLConnection.getInputStream

   ->getResource().openRawResource(R.raw.a);
   ->xmlPullParser.setInput(inputStream, "utf-8");
   ->xmlReader.parse(new InputSource(getResources().openRawResource(R.raw.worker)));


InputStream in</span> = null;
            FileOutputStream fos = null;
            if (httpURLConnection.getResponseCode() == 200) {
                in = httpURLConnection.getInputStream();
                fos = new FileOutputStream(getCacheDir().getPath()+"a.bmp");
                byte[] arr = new byte[1024];
                int len = 0;
                //每次读取 1024个字节,如果读取返回为-1说明到了文件的末尾,结束读取
                while ((len = in.read(arr)) != -1) {
                    fos.write(arr, 0, len);
                }
                //一定要记住要关闭读取流。
                in.close();
                fos.close();
            }


 //XmlPullParser的工厂类
        XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
        XmlPullParser xmlPullParser = factory.newPullParser();

        //xmlPullParser.setInput的第一个参数就是 InputStream,
        //这里是将xml 文件放在了raw文件夹里面,然后通过getResources().openRawResource(R.raw.worker)来获取
        InputStream inputStream = getResources().openRawResource(R.raw.worker);
        //开始读取文件,并设置编码类型为utf-8
        xmlPullParser.setInput(inputStream, "utf-8");

        //获取event的类型,然后循环直至END_DOCUMENT,循环的增加条件一定不能忘记eventType=xmlPullParser.next();
        int eventType = xmlPullParser.getEventType();


//SAX 的工厂类
        SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();
        SAXParser saxParser = saxParserFactory.newSAXParser();
        // 通过parser得到XMLReader对象
        XMLReader xmlReader = saxParser.getXMLReader();
        //创建MyHandler的实例
        MyHandler saxHandler = new MyHandler();
        //将saxHanlder 放入xmlReader中。
        xmlReader.setContentHandler(saxHandler);
        xmlReader.parse(new InputSource(getResources().openRawResource(R.raw.worker)));
        //此时通过MyHandler 里面的方法来获取List<Worker>
        saxList = saxHandler.getmList();

FileInputStream相对与InputStream 这个构造方法里面可以放地址
BufferedInputStream 里面的参数是InputStream,其实就是InputStream的缓存流,因为FileInputStream 集成了InputStream ,所以也可以放FileInputStream

    //实例3 使用字节流的缓冲区复制一张图片  
    public void example3CopyImage() throws IOException{  
        BufferedInputStream bis =  
                new BufferedInputStream(getResources().openRawResource(R.raw.a));  
        BufferedOutputStream bos =  
                new BufferedOutputStream(new FileOutputStream(getCacheDir().getPath()+"/3.bmp"));  
        byte[] arr = new byte[1024];  
        int len=0;  
        while ((len=bis.read(arr))!=-1){  
            bos.write(arr,0,len);  
        }  
  
        bis.close();  
        bos.close();  
    }  


-----------------------------------------------------------------------

BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(getCacheDir().getPath()+"/print.txt")));  

//实例9,字符输出流  
    public void example9PrintWriter() throws IOException{  
        Log.d("kodulf", "实例9++++++++开始+++++++++++++");  
        /* 
         PrintWriter:字符输出流,字符输出流的基本功能都具备了,增加了打印功能 
                     可以操作的目的: 
                         File类型的文件 
                         字符串类型的文件 
                         字节输出流 
                         字符数出流 
        */  
  
        BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(getCacheDir().getPath()+"/print.txt")));  
  
        //PrintWriter pw = new PrintWriter(System.out,true);//自动刷新  
  
        PrintWriter pw = new PrintWriter(new FileWriter("qq.txt"),true);//自动刷新  
  
        String line = null;  
  
        while((line = br.readLine())!=null)  
        {  
            if("over".equals(line))  
                break;  
            pw.println(line);  
            //pw.write(line);  
            //pw.write("\r\n");  
            //pw.flush();  
        }  
        br.close();  
        pw.close();  
        Log.d("kodulf", "实例9++++++++结束+++++++++++++");  
    }  


1:输出流

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

OutputStream->HttpURLConnection.getOutputStream

            url = new URL("http://192.168.1.106:8080/ServerDemo/servlet/LoginServlert");  
            HttpURLConnection urlConnection = (HttpURLConnection)url.openConnection();  
  
            urlConnection.setRequestMethod("POST");  
            urlConnection.setConnectTimeout(5000);  
            urlConnection.setDoInput(true);  
            urlConnection.setDoOutput(true);//设置可以向服务器传递数据  
  
            //设置提交的内容的类型  
            urlConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");  
  
            //设置提交的内容的长度  
            byte[] data = sb.toString().getBytes("utf-8");//注意这里的编码utf-8  
            urlConnection.setRequestProperty("Content-Length", String.valueOf(data.length));  
  
            //提交数据  
            OutputStream outputStream = urlConnection.getOutputStream();  
            outputStream.write(data);  
            outputStream.close();  


FileOutputStream相对于OutputStream 这个构造方法啊里面可以放地址:FileOutputStream fos = new FileOutputStream(getCacheDir().getPath()+"/1.bmp"); 

1.1 需要存储的我们使用FileOutputStream 将它写入到文件中
            InputStream in = null;
            FileOutputStream fos = null;
            if (httpURLConnection.getResponseCode() == 200) {
                in = httpURLConnection.getInputStream();
                fos = new FileOutputStream(getCacheDir().getPath()+"a.bmp");
                byte[] arr = new byte[1024];
                int len = 0;
                //每次读取 1024个字节,如果读取返回为-1说明到了文件的末尾,结束读取
                while ((len = in.read(arr)) != -1) {
                    fos.write(arr, 0, len);
                }
                //一定要记住要关闭读取流。
                in.close();
                fos.close();
            }

BufferedOutputStream bos =  new BufferedOutputStream(new FileOutputStream(getCacheDir().getPath()+"/3.bmp"));

//实例3 使用字节流的缓冲区复制一张图片  
    public void example3CopyImage() throws IOException{  
        BufferedInputStream bis =  
                new BufferedInputStream(getResources().openRawResource(R.raw.a));  
        BufferedOutputStream bos =  
                new BufferedOutputStream(new FileOutputStream(getCacheDir().getPath()+"/3.bmp"));  
        byte[] arr = new byte[1024];  
        int len=0;  
        while ((len=bis.read(arr))!=-1){  
            bos.write(arr,0,len);  
        }  
  
        bis.close();  
        bos.close();  
    }  

-----------------------------------------------------------------------

PrintStream ps = new PrintStream(getCacheDir().getPath()+"/print.txt"); 

//实例8 打印流,字节输出流  
    public void example8PrintStream() throws IOException{  
        Log.d("kodulf", "实例8++++++++开始+++++++++++++");  
        /*打印流: 
         PrintStream:字节输出流,字节输出流的基本功能都具备了,又增加了打印功能 
                     可以操作的目的: 
                     File类型的文件 
                     字符串类型的文件 
                     字节输出流 
 
        */  
        PrintStream ps = new PrintStream(getCacheDir().getPath()+"/print.txt");  
        //ps.write(97);// 00000000 00000000 00000000 01100001---->自动砍掉了前三个字节--->01100001  
        //ps.write(353);//  00000000 00000000 00000001 01100001---->自动砍掉了前三个字节--->01100001  
        //System.out.println(353);  
        //ps.println(353);//按照数据原样儿写入到目的,也就是数据的表现形式,内部用了 String.valueOf()  
        ps.write(String.valueOf(353).getBytes());  
        ps.close();  
        Log.d("kodulf", "实例8++++++++结束+++++++++++++");  
    }  


ByteArrayOutputStream bos = new ByteArrayOutputStream();

            //判断服务器端的响应码是不是200  
            InputStream in = null;  
            if(urlConnection.getResponseCode()==200){  
                in = urlConnection.getInputStream();  
                ByteArrayOutputStream bos = new ByteArrayOutputStream();  
                byte[] arr = new byte[1024];  
                int len=0;  
                while((len=in.read(arr))!=-1){  
                    bos.write(arr,0,len);  
                }  
  
                byte[] b = bos.toByteArray();  
                String ss = new String(b,"utf-8");  
                Log.d("kodulf",ss);  
            }  
            //关闭流  
            in.close();  


BufferedWriter bw = new BufferedWriter(new FileWriter(recordFile));  

//实例7 得到指定目录下的所有的目录包括子目录下的,存到集合中,然后存到cache/record.text 文件中  
    //1:得到指定目录下的所有的Java文件包括子目录下的,存到集合中  
    //2:遍历集合,把集合中每个File对象写入到文件中  
    public void example7ListDirectorys() throws IOException{  
        Log.d("kodulf", "实例7++++++++开始+++++++++++++");  
        List<File> directorys = new ArrayList<File>();  
        File externalStorageDirectory = Environment.getExternalStorageDirectory();  
        listDirectorys(externalStorageDirectory, directorys);  
  
        File recordFile = new File(getCacheDir(),"record.text");  
        BufferedWriter bw = new BufferedWriter(new FileWriter(recordFile));  
        for (File file:directorys){  
            bw.write(file.getName());  
            bw.newLine();  
            bw.flush();  
        }  
  
        bw.close();  
  
        Log.d("kodulf", "实例7++++++++结束+++++++++++++");  
    }  


PrintWriter pw = new PrintWriter(new FileWriter("qq.txt"),true);->服务器端的PrintWriter,直接就是文本,所以用字符输出流

    //实例9,字符输出流  
    public void example9PrintWriter() throws IOException{  
        Log.d("kodulf", "实例9++++++++开始+++++++++++++");  
        /* 
         PrintWriter:字符输出流,字符输出流的基本功能都具备了,增加了打印功能 
                     可以操作的目的: 
                         File类型的文件 
                         字符串类型的文件 
                         字节输出流 
                         字符数出流 
        */  
  
        BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(getCacheDir().getPath()+"/print.txt")));  
  
        //PrintWriter pw = new PrintWriter(System.out,true);//自动刷新  
  
        PrintWriter pw = new PrintWriter(new FileWriter("qq.txt"),true);//自动刷新  
  
        String line = null;  
  
        while((line = br.readLine())!=null)  
        {  
            if("over".equals(line))  
                break;  
            pw.println(line);  
            //pw.write(line);  
            //pw.write("\r\n");  
            //pw.flush();  
        }  
        br.close();  
        pw.close();  
        Log.d("kodulf", "实例9++++++++结束+++++++++++++");  
    }  
}  

public void doPost(HttpServletRequest request, HttpServletResponse response)  
            throws ServletException, IOException {  
          
        response.setContentType("text/html;charset=utf-8");  
        PrintWriter out = response.getWriter();  
          
        request.setCharacterEncoding("utf-8");//请求方式是 post  
        //先得到客户端提交的用户名和密码  
        //因为客户端信息被封装在 request对象中,所以需要从request对象中获取用户名密码  
        String uname = request.getParameter("username");//?username= &psw=  
        //String uname = fun(name);  
          
        String psw = request.getParameter("password");  
          
        //验证  
        if(uname!=null&&uname.trim()!=""&&psw!=null&&psw.trim()!="")  
        {  
            if("哈哈".equals(uname) && "123".equals(psw))  
            {  
                out.println("登陆成功");  
            }  
            else  
                out.println("登陆失败");  
        }else{  
            out.println("参数有问题");  
        }  
        out.flush();  
        out.close();  
  
        /** 
        response.setContentType("text/html"); 
        PrintWriter out = response.getWriter(); 
         
         
        out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">"); 
        out.println("<HTML>"); 
        out.println("  <HEAD><TITLE>A Servlet</TITLE></HEAD>"); 
        out.println("  <BODY>"); 
        out.print("    This is "); 
        out.print(this.getClass()); 
        out.println(", using the POST method"); 
        out.println("  </BODY>"); 
        out.println("</HTML>"); 
        out.flush(); 
        out.close(); 
        */  
    }  






//实例9,字符输出流 public void example9PrintWriter() throws IOException{ Log.d("kodulf", "实例9++++++++开始+++++++++++++"); /* PrintWriter:字符输出流,字符输出流的基本功能都具备了,增加了打印功能 可以操作的目的: File类型的文件 字符串类型的文件 字节输出流 字符数出流 */ BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(getCacheDir().getPath()+"/print.txt"))); //PrintWriter pw = new PrintWriter(System.out,true);//自动刷新 PrintWriter pw = new PrintWriter(new FileWriter("qq.txt"),true);//自动刷新 String line = null; while((line = br.readLine())!=null) { if("over".equals(line)) break; pw.println(line); //pw.write(line); //pw.write("\r\n"); //pw.flush(); } br.close(); pw.close(); Log.d("kodulf", "实例9++++++++结束+++++++++++++"); }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值