«

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

时间:2024-4-15 08:57     作者:韩俊     分类: Java


本篇内容介绍了“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

热门推荐