首页 > 编程语言 >【Java基础】字符串、字符流中的编码解码问题、字符流写数据的5种方式、字符流读数据的2种方式及复制Java文件

【Java基础】字符串、字符流中的编码解码问题、字符流写数据的5种方式、字符流读数据的2种方式及复制Java文件

时间:2022-10-08 19:33:15浏览次数:47  
标签:字符 Java String int osw write 读数据 new


目录

​一、字符串中的编码解码问题​

​二、字符流中的编码解码问题​

​三、字符流写数据的5种方式​

​四、字符流读数据的2种方式​

​五、字符流复制Java文件​


一、字符串中的编码解码问题

相关方法:

方法名

说明

byte[] getByte()

使用平台的默认字符集将该String编码为一系列字节

byte[] getBytes(String charsetName)

使用指定的字符集将该String编码为一系列字节

String(byte[] bytes)

使用平台的默认字符集解码指定的字节数组来创建字符串

String(byte[] byte,String charsetName)

通过指定的字符集解码指定的字节数组来创建字符串

代码演示:

public class StringDemo {
public static void main(String[] args) throws UnsupportedEncodingException {
//定义一个字符串
String s = "中国";

//byte[] bys = s.getBytes(); //[-28, -72, -83, -27, -101, -67]
//byte[] bys = s.getBytes("UTF-8"); //[-28, -72, -83, -27, -101, -67]
byte[] bys = s.getBytes("GBK"); //[-42, -48, -71, -6]
System.out.println(Arrays.toString(bys));

//String ss = new String(bys);
//String ss = new String(bys,"UTF-8");
String ss = new String(bys,"GBK");
System.out.println(ss);
}
}

二、字符流中的编码解码问题

字符流中和编码问题相关的两个类

InputStreamReader:是从字节流到字符流的桥梁

它读取字节,并使用指定的编码将其解码为字符

它使用的字符集可以由名称指定,也可以被明确指定,或者可以接收平台的默认字符集

OutputStreamWriter:是从字符流到字节流的桥梁

是从字符流到字节流的桥梁,使用指定的编码将写入的字符编码为字节

它使用的字符集可以由名称指定,也可以被明确指定,或者可以接收平台的默认字符集

构造方法:

方法名

说明

InputStreamReade(InputStream in)

使用默认字符编码创建InputStreamReader对象

InputStreamReade(InputStream in,String chatset)

使用指定的字符编码创建InputStreamReader对象

OutputStreamWriter(OutputStream out)

使用默认字符编码创建OutputStreamWrite对象

OutputStreamWrite(OutputStream out,String charset)

使用指定的字符编码创建OutputStreamWriter对象

代码演示:

public class ConversionStreamDemo {
public static void main(String[] args) throws IOException {
//OutputStreamWriter osw = new OutputStreamWriter(new
FileOutputStream("myCharStream\\osw.txt"));
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("myCharStream\\osw.txt"),"GBK");
osw.write("中国");
osw.close();

//InputStreamReader isr = new InputStreamReader(new
FileInputStream("myCharStream\\osw.txt"));
InputStreamReader isr = new InputStreamReader(new FileInputStream("myCharStream\\osw.txt"),"GBK");

//一次读取一个字符数据
int ch;
while ((ch=isr.read())!=-1) {
System.out.print((char)ch);
}
isr.close();
}
}

三、字符流写数据的5种方式

方法介绍:

方法名

说明

void write(int c)

写一个字符

void write(char[] cbuf)

写入一个字符数组

void write(char[] cbuf,int off,int len)

写入字符数组的一部分

void write(String str)

写一个字符串

void write(String str,int off,int len)

写一个字符串的一部分

刷新和关闭的方法:

方法名

说明

flush()

刷新流,之后还可以继续写数据

close()

关闭流,释放资源,但是在关闭之前会先刷新流。一旦关闭

代码演示:

public class OutputStreamWriterDemo {
public static void main(String[] args) throws IOException {
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("myCharStream\\osw.txt"));
//void write(int c):写一个字符
osw.write(97);
osw.write(98);
osw.write(99);

//void writ(char[] cbuf):写入一个字符数组
char[] chs = {'a', 'b', 'c', 'd', 'e'};
osw.write(chs);

//void write(char[] cbuf, int off, int len):写入字符数组的一部分
osw.write(chs, 0, chs.length);
osw.write(chs, 1, 3);

//void write(String str):写一个字符串
osw.write("abcde");

//void write(String str, int off, int len):写一个字符串的一部分
osw.write("abcde", 0, "abcde".length());
osw.write("abcde", 1, 3);

//释放资源
osw.close();
}
}

四、字符流读数据的2种方式

方法介绍:

方法名

说明

int read()

一次读一个字符数据

int read(char[] cbuf)

一次读一个字符数组数据

代码演示:

public class InputStreamReaderDemo {
public static void main(String[] args) throws IOException {
InputStreamReader isr = new InputStreamReader(new FileInputStream("myCharStream\\ConversionStreamDemo.java"));

// int read():一次读一个字符数据
int ch;
while ((ch=isr.read())!=-1) {
System.out.print((char)ch);
}

// int read(char[] cbuf):一次读一个字符数组数据
char[] chs = new char[1024];
int len;
while ((len = isr.read(chs)) != -1) {
System.out.print(new String(chs, 0, len));
}
//释放资源
isr.close();
}
}

五、字符流复制Java文件

需求:

使用便捷流对象,把模块目录下的“ConversionStreamDemo.java” 复制到模块目录下的“Copy.java”

实现步骤:

● 根据数据源创建字符输入流对象

● 根据日志目的地创建字符输出流对象

● 读写数据,复制文件

● 释放资源

代码实现:

public class CopyJavaDemo02 { 
public static void main(String[] args) throws IOException {
//根据数据源创建字符输入流对象
FileReader fr = new FileReader("myCharStream\\ConversionStreamDemo.java");
//根据目的地创建字符输出流对象
FileWriter fw = new FileWriter("myCharStream\\Copy.java");

//读写数据,复制文件
int ch;
while ((ch=fr.read())!=-1) {
fw.write(ch);
}

char[] chs = new char[1024];
int len;
while ((len=fr.read(chs))!=-1) {
fw.write(chs,0,len);
}

//释放资源
fw.close();
fr.close();
}
}

标签:字符,Java,String,int,osw,write,读数据,new
From: https://blog.51cto.com/u_15815415/5738609

相关文章

  • 测试开发【Mock 平台】02 基础:Java Spring Boot 框架知识
    https://xie.infoq.cn/article/37e7c39312567cad5db8b4fb6系列测试开发教程【Mock平台】为真实的案例,从0到1重构前后端代码,教你一步步应用SpringBoot和Antd......
  • idea关于java.lang.ClassNotFoundException: com.mysql.cj.jdbc.Driver报错的解决办法
     第一步,下载驱动 点击以下链接进入MySQL驱动下载官网 https://dev.mysql.com/downloads/connector/j/ 选择PlatformIndependent   下载第二个(zip格......
  • [JavaSE]数据类型
    数据类型基本数据类型数值数据类型整型byteshortintlonglonga=100L;整数拓展二级制:0b123inti=0b11;输出:3十进制:123inti=11;输出:11八进制:0123......
  • 字符串的模式匹配
    字符串的模式匹配就是在主串中找到子串。基本方法一,是一趟一趟地比较。但是可能引起回溯,从而浪费时间,引起回溯的原因是,主串中从在和子串部分匹配的子串,这样就欺骗了程序......
  • java常用代码
    1/写一个java类充当javabean,一个jsp作为界面,在jsp中使用后台java赋值,需在jsp添加<jsp:useBeanid="user"class="test.UserData"scope="session"/>class引用类所在的......
  • java----小案例,幸运会员,打印正三角
    案例一1.接收一个4位数会员号2.生成随机数并乘以103.算出会员号中的百位数字的数字号与生成的随机数比较4.如果相等则是幸运会员,反之不是packagelearnday5;​import......
  • js字符串
    字符串声明1.直接声明 varstr='hello'2.使用new关键字(会开辟新的内存空间)varstr=newString('hello')newString和String的区别 前者开辟空间后者只是进行......
  • Java8中LocalDateTime与时间戳timestamp的互相转换及ChronoUnit工具类
    Java8中LocalDateTime与时间戳timestamp的互相转换及ChronoUnit工具类importjava.time.*;importjava.time.format.DateTimeFormatter;importjava.time.temporal.Chr......
  • Java服务发起HTTPS请求报错:PKIX path building failed: sun.security.provider.certpa
    Java服务发起HTTPS请求报错:PKIXpathbuildingfailed:sun.security.provider.certpath.SunCertPathBuilderException1.从域名的https导出下载证书文件下载证书第一步是......
  • 零基础如何学习入门Java编程
    如何学习在以前大部分人学习都是先去找本书,先看看,再试,要是不懂了在去网上去查,再在继续啃着书本。但现在向书学习和在网上学习这掌握的效果是不同的,要学会用适合自己的学习方......