java中字符输入输出流在输出结果的结尾多一个乱码字符:'?'

原因以及解决方法:

核心方法如下:

 1 public static void main(String[] args) throws Exception{
 2         // TODO Auto-generated method stub
 3
 4         FileReader fr=new FileReader("test.txt");
 5         FileWriter fw=new FileWriter("test2.txt");
 6
 7         /*int b=0;
 8         while(b!=-1){
 9             b=fr.read();
10             System.out.print("-"+(char)b);
11             fw.write(b);
12
13         用这种方法会比下面的方法在最后的文本后面多出一个乱码‘?‘
14         因为当读取到最后一个字符时,b此时还不等于-1,判断后会接着读取
15         下一个字符,但在上一次读取时已读取到最后一个字符,所以这次
16         就什么都读取不到(产生乱码),并返回-1,结束循环
17         }*/
18
19         int b;
20         while((b=fr.read())!=-1){
21
22             System.out.print("-"+(char)b);
23             fw.write(b);      //这个方法的优点在于它会在读取的同时判断是否执行方法体
24         }
25         fr.close();
26         fw.close();
27     }

java中字符输入输出流在输出结果的结尾多一个乱码字符:'?'

时间: 2024-10-01 13:24:22

java中字符输入输出流在输出结果的结尾多一个乱码字符:'?'的相关文章

java中复制文本文件的方式我总结为14种(按字符读取4中,按字节读取8种!??)

java中复制文件的方式 如果按照字符来读取的话,可以有4种,基本的2种,高效的2种,高效特殊的1种 第0种: public class CopyFileDemo { public static void main(String[] args) throws Exception{ //封裝数据源 BufferedReader reader = new BufferedReader(new FileReader("a.txt")); //封装目的地 BufferedWriter writ

Java中的输出流

1.输出流的三种方式 1)按字符输出,覆盖原来的内容 2)按字节输出,覆盖原来的内容 3)不覆盖原来的内容 package output; import java.io.BufferedWriter; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.FileWriter; import java.io.IOException; im

Java中输入输出流

InputStream:所有字节输入流的所有类的超类. read(byte[] b)从输入流中读取一定数量的字节,并将其存储在缓冲数组b中 reset()将此流重新定位到最后一次对此流调用mark方法的地方 InputStream的所有子类:FileInputStream,ByteArrayInputStream,FileInputStream,StringBufferInputStream OutputStream:所有字节输出流的所有流的超类. flush():刷新该流中的缓冲,将缓冲数据写

java中switch用法,输出第几天

import java.util.Scanner; public class month{ public static void main(String [] args){ Scanner scanner=new Scanner(System.in); /* 输入month=? day=? 输出第几天 */ System.out.print("month:"); int month = scanner.nextInt(); System.out.print("day:&quo

java中的随机数(Math.random()),以及如何产生一个类似于[21,77]区间的随机数。

//Math.random()产生的是[0,1)!!! double k=Math.random(); //注意下面那个=要加上,这样才满足数学对称性 if(k>=0.5)//意思是当产生的随机数大于等于0.5时说自己牛B,小于0.5时说这种自己傻B System.out.println("我活在牛A和牛C之间"+k); else System.out.println("我活在傻A和傻C之间"+k); //===========================

107、Java中String类之判断开头或结尾

01.代码如下: package TIANPAN; /** * 此处为文档注释 * * @author 田攀 微信382477247 */ public class TestDemo { public static void main(String args[]) { String str = "##@@hello**"; // 字符串对象 System.out.println(str.startsWith("##")); // 是否以“##”开头 System.o

Java中final、finally、finalize的区别(转)

Java中final.finally.finalize的区别与用法,困扰了不少学习者,下面我们就这个问题进行一些探讨,希望对大家的学习有所帮助. 方法/步骤 1 简单区别: final用于声明属性,方法和类,分别表示属性不可交变,方法不可覆盖,类不可继承. finally是异常处理语句结构的一部分,表示总是执行. finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,供垃圾收集时的其他资源回收,例如关闭文件等. END 方法/步骤2 1 中等区别: 虽然这三

技术文章-java中的IO流

1.File类 Java中对文件有操作时,可以实例化一个File对象,将文件路径利用这样的形式赋给File对象. File f = new File(filePath); File类的基本操作包括: 判断是否存在:f.exists() 获取文件名:f.getName() 获取其绝对路径:f.getAbsolutePath() 但是如果涉及文件的查看与存储,就要利用IO的输入和输出流进行操作. 2.输入流: 常用的有InputStream类. 对于txt类文件查看的操作如下: // 创建输入流 I

关于Java中多维数组的内存结构分析

基本概念 本文主要针对JVM中关于一维数组和二维数组的内存模型分析.验证.讨论![仅供参考]. 1.概念模型 1)一维数组 int arr[] = new int[3]; 2)二维数组 int[ ][ ] arr = new int[3][ ]; arr[0] = new int[3]; arr[1] = new int[5]; arr[2] = new int[4]; 3)Java中的对象(本章节主要分析和数组相关的内容,关于Java对象的Memory结构会在以后说明!) class A {