这篇文章主要介绍了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-03-07
- Java实现查找文件和替换文件内容 2023-04-06
- java实现多人聊天系统 2023-05-19
- springboot自定义starter方法及注解实例 2023-03-31
- Java并发编程进阶之线程控制篇 2023-03-07
- ConditionalOnProperty配置swagger不生效问题及解决 2023-01-02
- JDK数组阻塞队列源码深入分析总结 2023-04-18
- Java文件管理操作的知识点整理 2023-05-19
- Java实现线程插队的示例代码 2022-09-03
- java基础知识之FileInputStream流的使用 2023-08-11