本篇内容介绍了“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如何实现字符串和输入流的相互转换”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。