Java实现字符串和输入流的相互转换

 更新时间:2022年08月19日 09:50:05   作者:dangnianmingyue_gg  
这篇文章主要介绍了Java实现字符串和输入流的相互转换方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

字符串和输入流的相互转换

在读取网络资源时经常要用到字符串和输入流之间的相互转化,找到了些方法,记录一下。

将字符串转化为输入流,代码如下:

public static InputStream getStringStream(String sInputString){ 
  if (sInputString != null && !sInputString.trim().equals("")){ 
      try{ 
          ByteArrayInputStream tInputStringStream = new ByteArrayInputStream(sInputString.getBytes()); 
          return tInputStringStream; 
      }catch (Exception ex){ 
          ex.printStackTrace(); 
      } 
  } 
  return null; 
}

将输入流转化会字符串,代码如下:

public static String getStreamString(InputStream tInputStream){ 
  if (tInputStream != null){ 
       try{ 
            BufferedReader tBufferedReader = new BufferedReader(new InputStreamReader(tInputStream)); 
            StringBuffer tStringBuffer = new StringBuffer(); 
            String sTempOneLine = new String(""); 
            while ((sTempOneLine = tBufferedReader.readLine()) != null){ 
                tStringBuffer.append(sTempOneLine); 
            } 
           return tStringBuffer.toString(); 
      }catch (Exception ex){ 
           ex.printStackTrace(); 
      } 
  } 
  return null; 
}

或者是以下的方法,代码如下:

public class StreamTool {
    /**
     * 把输入流的内容转化成字符串
     * @param is
     * @return
     */
    public static String readInputStream(InputStream is){
        try {
            ByteArrayOutputStream baos=new ByteArrayOutputStream();
            int length=0;
            byte[] buffer=new byte[1024];
            while((length=is.read(buffer))!=-1){
                baos.write(buffer, 0, length);
            }
            is.close();
            baos.close();
            //或者用这种方法
            //byte[] result=baos.toByteArray();
            //return new String(result);
            return baos.toString();
        } catch (Exception e) {
            e.printStackTrace();
            return "获取失败";
        }
    }
}

字符输入与输出流

字符输入流

java.io.Reader抽象是所有字符输入流的父类,用于读取文件内容

字符输入流结构:

字符输入流

为了读取方便,Java提供了一种读取字符文件的便捷类。

FileReader类

构造方法:

  • FileReader(File file); 在给定从中读取数据的 File 的情况下创建一个新 FileReader。
  • FileReader(String fileName); 在给定从中读取数据的文件名的情况下创建一个新 FileReader。

常用读取方法:

方法名说明
int read()读入一个字符,都到结尾则返回-1
int read(char[] cbuf)将读取的cbuf.length个字符读取到char数组中
int read(char[] cbuf, int off, int len)从此字符输入流中偏移量off到len个字符读取到char数组中
void reset()重置该流
boolean ready()判断是否准备读取此流
void close()关闭字符输入流,并释放所有系统资源
long skip(long n)跳过读取n个字符,并返回跳过字符的数量
void mark(int readLimit)将此输入流标记,当使用reset方法时就返回到该位置,从此位置开始读入字符

1.单个读取,如果文件太大不建议使用。

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
public class dome2{
	public static void main(String[] args){
	  File file=new File("D:/../...txt");   //创建file对象
	  FileReader fr=null;
	  
	  try {
		fr=new FileReader(file);
		int c;  
		while((c=fr.read())!=-1) { 
			System.out.print((char)c);  //强制转换成字符
		}
	} catch (FileNotFoundException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	} catch (IOException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}finally {
		if(fr!=null) {
			try {
				fr.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
   }
}

2.读取多个字符输出。

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
public class dome2{
	public static void main(String[] args){
	  File file=new File("D:/../...txt");   
	  FileReader fr=null;
	  
	  try {
		fr=new FileReader(file);
		char[] c=new char[100];
		int length;
		while((length=fr.read(c))!=-1) {
			System.out.println(new String(c,0,length));  
		}
	} catch (FileNotFoundException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	} catch (IOException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}finally {
		if(fr!=null) {
			try {
				fr.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
   }
}

字符输出流

java.io.Writer抽象类是所有字符输出流的父类,用于对文件写入数据。

字符输出流结构:

字符输出流

为了写入Java提供了一种字符写入的便捷类。

FileWriter类

构造方法:

  • FileWriter(File file)FileWriter(String fileName); 使用给定的file对象或者给定的文件路径名构造一个FileWriter对象。
  • FileWriter(File file, boolean append)FileWriter(String fileName, boolean append); 通过给定的file对象或者文件路径名构造FileWriter对象,以及是否追加还是覆盖。

常用读取方法

方法名说明
void write(char[] cbuf)将cbuf指定的所有字符数组写入到字符输出流中
void write(int c)向字符输出流中写入一个字符
void write(char[] cbuf,int off,int len)将cbuf数组中的字符从偏移量off到长度为len个字符写入到此输出流中。
void write(String str )向字符输流中写入一个字符串
void write(String str , int off ,int len)将str字符串从偏移量off,长度为len个字符串写入到此输出流中。
Abstract void flush()刷新当前输出流,并强制写入所有字符数据
abstract void close()关闭此输出流

1.writer(int c);写入一个字符

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
public class dome2{
	public static void main(String[] args){
	  File file=new File("D:/../...txt");   //创建file对象
       FileWriter  fw=null;
       
       try {
		fw=new FileWriter(file);
		char c='你';
		fw.write((int)c);
	} catch (IOException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}finally {
		if(fw!=null) {
			try {
				fw.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}       
   }
}

2.writer(String str); 写入一个字符串

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
public class dome2{
	public static void main(String[] args){
	  File file=new File("D:/../...txt");   //创建file对象
       FileWriter  fw=null;
       
       try {
		fw=new FileWriter(file);
		String str="你好,java";
		fw.write(str);  //写入一个字符串,等价于write(str,0,str.length);
	} catch (IOException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}finally {
		if(fw!=null) {
			try {
				fw.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}       
   }
}

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • SpringBoot基于SpringSecurity表单登录和权限验证的示例

    SpringBoot基于SpringSecurity表单登录和权限验证的示例

    这篇文章主要介绍了SpringBoot基于SpringSecurity表单登录和权限验证的示例。文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • javaWeb实现简单文件上传

    javaWeb实现简单文件上传

    这篇文章主要为大家详细介绍了JAVAWeb实现简单文件上传,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-06-06
  • java利用时间格式生成唯一文件名的方法

    java利用时间格式生成唯一文件名的方法

    这篇文章主要介绍了java利用时间格式生成唯一文件名的方法,需要的朋友可以参考下
    2017-01-01
  • Netty网络编程实战之搭建Netty服务器

    Netty网络编程实战之搭建Netty服务器

    Netty是JBOSS开源的一款NIO网络编程框架,可用于快速开发网络的应用。Netty是一个异步的、基于事件驱动的网络应用框架,用于快速开发高性能的服务端和客户端。本文将详细说说如何搭建Netty服务器,需要的可以参考一下
    2022-10-10
  • idea不能自动补全yml配置文件的原因分析

    idea不能自动补全yml配置文件的原因分析

    这篇文章主要介绍了idea不能自动补全yml配置文件的原因,通过添加yml文件为配置文件能够很快的解决,具体解决步骤跟随小编一起通过本文学习下吧
    2021-06-06
  • Eclipse 2020-06 汉化包安装步骤详解(附汉化包+安装教程)

    Eclipse 2020-06 汉化包安装步骤详解(附汉化包+安装教程)

    这篇文章主要介绍了Eclipse 2020-06 汉化包安装步骤(附汉化包+安装教程),本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-08-08
  • 详解Java中native关键字

    详解Java中native关键字

    这篇文章主要为大家详细介绍了Java中native关键字,什么是Native Method
    2016-02-02
  • java实现扑克牌牌面小程序

    java实现扑克牌牌面小程序

    这篇文章主要为大家详细介绍了java实现扑克牌牌面小程序,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-11-11
  • java快速生成接口文档的三种解决方案

    java快速生成接口文档的三种解决方案

    我们知道在项目开发阶段,接口文档基本上是必备产物了,一般由后端开发人员提供,作为和前端人员进行前后端接口联调的桥梁,或者与别的项目模块进行交互提供指导等等,这篇文章主要给大家介绍了关于java快速生成接口文档的三种解决方案,需要的朋友可以参考下
    2021-07-07
  • 详解Spring Cloud Eureka多网卡配置总结

    详解Spring Cloud Eureka多网卡配置总结

    本篇文章主要介绍了详解Spring Cloud Eureka多网卡配置总结,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-04-04

最新评论