这篇文章主要介绍了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();
			}
		}
	}       
   }
}
以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程学习网。
				 沃梦达教程
				
			本文标题为:Java实现字符串和输入流的相互转换
				
        
 
            
        
             猜你喜欢
        
	     - Java实现顺序表的操作详解 2023-05-19
 - 深入了解Spring的事务传播机制 2023-06-02
 - SpringBoot使用thymeleaf实现一个前端表格方法详解 2023-06-06
 - JSP 制作验证码的实例详解 2023-07-30
 - Java中的日期时间处理及格式化处理 2023-04-18
 - ExecutorService Callable Future多线程返回结果原理解析 2023-06-01
 - 基于Java Agent的premain方式实现方法耗时监控问题 2023-06-17
 - Spring Security权限想要细化到按钮实现示例 2023-03-07
 - Springboot整合minio实现文件服务的教程详解 2022-12-03
 - JSP页面间传值问题实例简析 2023-08-03
 
						
						
						
						
						
				
				
				
				