string-java 字符串写入文件后再读出不一样?

问题描述

java 字符串写入文件后再读出不一样?

import java.io.*;

public class TestString {

public static void main(String[] args) throws Exception {

    String str = "1";
    String password = "x";

    char s[] = str.toCharArray();
    char p[] = password.toCharArray();
    int n = s.length;
    int m = p.length;

    for (int k=0; k<n; ++k) {
        int temp = s[k] + p[k%m];
        s[k] = (char)temp;
    }
  System.out.println("1 : " + (int)s[0] + "  " +  s[0]);  // 输出:  1  :  169   ?
    str = new String(s);

    File file = new File("Test.txt");
    FileWriter fw = new FileWriter(file);
    fw.write(str);
    fw.flush();
    fw.close();

    FileReader fr = new FileReader(file);
    String sss = "";
    int b;
    while ((b=fr.read()) != -1) {
        System.out.println("2 : " + b + "  " + (char)b);  // 输出: 2 : 63  ?
        sss = sss + (char)b;
    }

    System.out.println("str : " + str);  // 输出: str : ?
    System.out.println("sss : " + sss); // 输出: sss : ?
    System.out.println(str.equals(sss)); // 输出: false
}

}

解决方案

测试了你的代码,写入的str是和字符串"?"的equals是false,所以读出来的值与“?”equals时是false.
分析原因是equals方法判断相等操作是以字符数组处理的,你定义str时是通过字符数组赋值的,如果你直接赋值str="?",再写入文件,那么读取出来时再equals"?"就是true了。
可以研究下String的equals方法,猜测是while循环字符数组中返回false导致的。
并不是说你写入文件和读出文件的内容不同,而是字符串的equals方法可能有我们不知道的处理罢了。

解决方案二:

我的一些理解,不知道对不对

 public static void solution1() throws Exception{
        String str = "1";
        String password = "x";

        char s[] = str.toCharArray();
        char p[] = password.toCharArray();
        int n = s.length;
        int m = p.length;
        //长度是字符串长度
        for (int k=0; k<n; ++k) {
            int temp = s[k] + p[k%m];
            s[k] = (char)temp;
        }
        //str[i] = str[i]+password[i]
        //s[0]变成扩展字符?
        System.out.println("1 : " + (int)s[0] + "  " +  s[0]);  // 输出:  1  :  169   ?
        //如果直接赋值提示我含有丢失的字符
        //str = "?";
        str = new String(s);
        //加密后?
        System.out.println(str);

        System.out.println(Charset.defaultCharset());
        //可能由于编码问题,写入之后会丢失,可以查看文件的十六进制表示是3F,即63,问号
        File file = new File("CSDNTest.txt");
        FileWriter fw = new FileWriter(file);
        fw.write(str);
        fw.flush();
        fw.close();

        FileReader fr = new FileReader(file);
        String sss = "";
        int b;
        while ((b=fr.read()) != -1) {
            System.out.println("2 : " + b + "  " + (char)b);  // 输出: 2 : 63  ?
            sss = sss + (char)b;
        }
        //str并不是真正的"?"字符串
        System.out.println("str : " + str);  // 输出: str : ?
        //读出来的是实实在在的"?"字符串
        System.out.println("sss : " + sss); // 输出: sss : ?
        System.out.println(str.equals(sss)); // 输出: false
    }

解决方案三:

 public static void solution1() throws Exception{
        String str = "1";
        String password = "x";

        char s[] = str.toCharArray();
        char p[] = password.toCharArray();
        int n = s.length;
        int m = p.length;
        //长度是字符串长度
        for (int k=0; k<n; ++k) {
            int temp = s[k] + p[k%m];
            s[k] = (char)temp;
        }
        //str[i] = str[i]+password[i]
        //s[0]变成扩展字符
        System.out.println("1 : " + (int)s[0] + "  " +  s[0]);  // 输出:  1  :  169   ?
        str = new String(s);
        //加密后
        System.out.println(s);

        System.out.println(Charset.defaultCharset());
        //可能由于编码问题,写入之后会丢失,可以查看文件的十六进制表示是3F,即63,问号
        File file = new File("CSDNTest.txt");
        //使用UTF-8创建流
        OutputStreamWriter fw = new OutputStreamWriter(
            new FileOutputStream(file),"utf-8");
        fw.write(str);
        fw.flush();
        fw.close();
        //使用UTF-8解析流
        InputStreamReader fr =new InputStreamReader(
            new FileInputStream(file),"utf-8");
        String sss = "";
        int b;
        while ((b=fr.read()) != -1) {
            System.out.println("2 : " + b + "  " + (char)b);  // 输出: 2 : 63  ?
            sss = sss + (char)b;
        }
        //str并不是真正的"?"字符串
        System.out.println("str : " + str);  // 输出: str : ?
        //读出来的是实实在在的"?"字符串
        System.out.println("sss : " + sss); // 输出: sss : ?
        System.out.println(str.equals(sss)); // 输出: false
    }

控制台显示的依然是问号,但是文件里确实写入了?, 并且也能输出true

解决方案四:

Java文件的写入与读出
java 字符串写入文件
java将字符串写入到txt文件中

时间: 2024-11-02 18:33:01

string-java 字符串写入文件后再读出不一样?的相关文章

32 卡文件系统-STM32FAT文件系统,写入文件后显示乱码

问题描述 STM32FAT文件系统,写入文件后显示乱码 本人是新手,最近再做一个串口接收字符串到buffer,然后把buffer里的数据写到SD卡里,FAT文件系统我是移植了官方的,串口能正常接收数据,也能写卡,但是我把SD卡插到电脑上查看写的结果时,显示乱码,请教各路大神,这是为什么?这是我写的SD卡写文件函数: void WriteSDFile(unsigned char * USARTx_RX_BUF) { disk_initialize(0);//初始化SD卡 f_mount(0, &f

java 生成XML文件后,能不能去掉其中的根节点,但是不能删除根节点中的子节点内容

问题描述 java 生成XML文件后,能不能去掉其中的根节点,但是不能删除根节点中的子节点内容 比如 这个,生成的XML文件格式内容为: <?xml version=""1.0"" encoding=""UTF-8""?> <!--查询行号--> <!--机构码--> <!--公共交易机构名称--> <!--交易来源--> <!--交易名称--> <

中文乱码-ckdinder整合进java里面选择文件后返回路径名带中文的变成乱码

问题描述 ckdinder整合进java里面选择文件后返回路径名带中文的变成乱码 在java上使用ckfinder,上传文件成功,中文名也行,就是选择这个带中文名的文件时,返回的路径变成乱码 解决方案 URIEncoding=""UTF-8""你看看你的tomcat有没有设置这个

R语言写入文件后中文乱码

问题描述 R语言写入文件后中文乱码 在控制台录入a="你好",可以正常显示,但是read.table(a,"a.txt",fileEncoding="GBK")后,打开a.txt却显示:.请问如何避免这种情况,使"你好"可以正常写入a.txt 解决方案 虽然R语言不熟,但是read.table()应该是读文件吧! 你都没写过文件,a.txt当然没内容.

java把字符串写入文件里的简单方法分享_java

这个示例可以很简单的把字符串写入到文件,大家可以试试哟,这是跟一个外国朋友学的代码,大家可以学习一下了 复制代码 代码如下: import java.io.IOException;import java.nio.file.Files;import java.nio.file.Paths; public class StringToFile {    public static void main(String[] args) throws IOException {        String

DOS下编译一个.java文件后再用java不能编译文件名.class文件?

问题描述 比如hello.java文件编译后生成hello.class文件后,用java命令只能输入javahello,为什么不能输入javahello.class(会出现couldnotfindorloadmainclasshello.class)? 解决方案 解决方案二:javacxxx.java是编译,javaxxx是执行,不是编译.JAVA跨平台的特性,一次编译,多次执行.解决方案三:还有,这是一个标准,在操作系统上就只认识这个东西,如果你写一个操作系统,要加上.class才能执行,那就

JAVA实现写入文件到文本文档

1.以PrintWriter来实现写入   Java代码   import java.io.*;       public class test {           /**        * @param args        */       public static void main(String[] args) {            String path="e://a.txt";            try {                FileWriter

如何上传Excel直接读取里面的数据,不用保存excel文件后再读取

问题描述 HttpPostedFileBasemypostfile=Request.Files[0];stringmyfile=MyPathEx.myfileName(@"事业单位准考证上传");myfile=myfile+".xlsx";myfile=MyPathEx.saveFile(mypostfile,Server,@"/ImportFile/",myfile);//保存上载文件的内容,并返回上传的路径+文件名ExamineeOp_1.S

读取音乐文件后再写入不可用

问题描述 将一个MP3音乐文件以二进制方式读出,再写入到令一个空mp3文件中,结果不可播放,为什么呢?eg:二进制方式读取1.mp3建立一个空的2.mp3将1.mp3的内容以二进制方式写入2.mp3结果2.mp3不可播放请问是什么原因呢?难道二进制方式写入不可用吗? 解决方案 解决方案二:不会的,也许读出来的内容与原内容不一样了,比如文件指针在文件中某位置,读出来的内容就会比原来的内容少反正是在读出内容与写入内容时与原内容不一样才会无法播放解决方案三:先查看文件大小.看两个文件的大小是否一致.不