Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将base64的文本文件转换为xml文件(或任何其他类型的文件)_Java_Byte_Bytearray_Inputstream_Fileinputstream - Fatal编程技术网

Java 如何将base64的文本文件转换为xml文件(或任何其他类型的文件)

Java 如何将base64的文本文件转换为xml文件(或任何其他类型的文件),java,byte,bytearray,inputstream,fileinputstream,Java,Byte,Bytearray,Inputstream,Fileinputstream,我将这些Base64保存在文本文件中: 77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjxSb290Pg0KICA8SXRl bXM+DQogICAgPEl0ZW0gTmFtZT0iQ2xhaW1OdW1iZXIiIFZhbHVlPSI0ODY1MTQ4MDQiIC8+DQog ICAgPEl0ZW0gTmFtZT0iRG9jVHlwZSIgVmFsdWU9IkxpdGlnYXRpb24iIC8+DQogICAgPEl0ZW0g

我将这些Base64保存在文本文件中:

77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjxSb290Pg0KICA8SXRl
bXM+DQogICAgPEl0ZW0gTmFtZT0iQ2xhaW1OdW1iZXIiIFZhbHVlPSI0ODY1MTQ4MDQiIC8+DQog
ICAgPEl0ZW0gTmFtZT0iRG9jVHlwZSIgVmFsdWU9IkxpdGlnYXRpb24iIC8+DQogICAgPEl0ZW0g
TmFtZT0iRG9jU3ViVHlwZSIgVmFsdWU9IklOVCBBbnN3ZXJzIiAvPg0KICAgIDxJdGVtIE5hbWU9
IkRvY0RhdGVzIiBWYWx1ZT0iNi8xNC8yMDExIDEyOjAwOjAwIEFNIiAvPg0KICAgIDxJdGVtIE5h
bWU9IkNvbW1lbnRzIiBWYWx1ZT0iUGx0ZiBhbnN3ZXJzIHRvIGludHMgYW5kIHN1bW1hcnkgYnkg
ZGVmZW5zZSBjb3Vuc2VsIiAvPg0KICAgIDxJdGVtIE5hbWU9IlNlY3VyaXR5R3JvdXAiIFZhbHVl
PSJTcGVjIEdlbiIgLz4NCiAgICA8SXRlbSBOYW1lPSJDbGFpbU9mZmljZSIgVmFsdWU9IkFsdCBN
a3RzIE5KIiAvPg0KICAgIDxJdGVtIE5hbWU9IkNsYWltYW50TmFtZSIgVmFsdWU9IkpvYW4gS2Vs
bGV5IiAvPg0KICAgIDxJdGVtIE5hbWU9Ikluc3VyZWROYW1lIiBWYWx1ZT0iQm96dXR0byAmYW1w
OyBBc3NvY2lhdGVzIiAvPg0KICAgIDxJdGVtIE5hbWU9IlByaXZpbGVnZWQiIFZhbHVlPSJObyIg
Lz4NCiAgICA8SXRlbSBOYW1lPSJEaXNwb3NpdGlvbiIgVmFsdWU9IlNlbnQgdG8gRmlsZSIgLz4N
CiAgICA8SXRlbSBOYW1lPSJGZWF0dXJlIiBWYWx1ZT0iIiAvPg0KICAgIDxJdGVtIE5hbWU9IlNl
bnRUbyIgVmFsdWU9IiIgLz4NCiAgICA8SXRlbSBOYW1lPSJGbGFnIiBWYWx1ZT0iMCIgLz4NCiAg
ICA8SXRlbSBOYW1lPSJSZXRhaW5JbWFnZSIgVmFsdWU9Ik5vIiAvPg0KICAgIDxJdGVtIE5hbWU9
IlJldGFpbk9yaWdpbmFsIiBWYWx1ZT0iRG8gTm90IFJldGFpbiIgLz4NCiAgICA8SXRlbSBOYW1l
PSJTb3VyY2UiIFZhbHVlPSJJTkRFWEVEIiAvPg0KICA8L0l0ZW1zPg0KICA8Um91dGU+DQogICAg
PHRvIC8+DQogICAgPGNjIC8+DQogICAgPE5vdGUgLz4NCiAgPC9Sb3V0ZT4NCjwvUm9vdD4=
我需要能够从文本文件中获取这些基本64个字符,并输出一个新的XML文件。当前,InputStream未正确转换为base 64

public static void main(String[] args) {
    try {
    File file = new File("C:\\Users\\khurt\\Desktop\\xml.txt");
    InputStream myScan = new FileInputStream(file);
    byte[] b = new byte[(int)file.length()];
    myScan.read(b);
    String cowo = myScan.toString();
    String decoded = DatatypeConverter.printBase64Binary(b);
    String cat = b.toString();
    System.out.println(decoded);
    byte[] bArray = cat.getBytes();
        OutputStream out = new FileOutputStream("C:\\Users\\gdfurt\\Desktop\\cow.xml");
        out.write(b);
        out.close();
    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

我使用了System.out.printldecode;检查字符是否与文件中的字符匹配,但不匹配。我不明白为什么,我试过使用扫描仪,但这会让它更糟。

你得到的数据是Base64编码的。你没有在你的代码中解码它。这是其他程序无法将其读取为XML文件的主要原因

另一个隐藏在数据字节中。字节数据的开头是77u/表示数据是二进制数据,这就成了问题

使用链接体验解码数据:

若你们在数据开始时使用77u/的话,你们将体验到数据是二进制的,并且将作为文件下载。如果您不使用77u/它将仅在线显示输出

在处理数据时删除前4个字符,然后只进入java代码

编辑

请使用下面的代码段。您正在重新编码字节数组。你需要解码它。此外,此过程需要字符串到字节的少量位转换,反之亦然

try {
File file = new File("C:\\Users\\ABC\\Desktop\\xml.txt");
InputStream myScan = new FileInputStream(file);
byte[] b = new byte[(int)file.length()];
myScan.read(b);
String cowo = new String(b);
System.out.println( cowo );
String decoded = new String(DatatypeConverter.parseBase64Binary(cowo));
String cat = b.toString();
System.out.println(decoded);
byte[] bArray = cat.getBytes();
    OutputStream out = new FileOutputStream("C:\\Users\\ABC\\Desktop\\cow.xml");
    out.write(decoded.getBytes());
    out.close();
} catch (FileNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
} catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}
读取字节:

        byte[] b;
        try (InputStream in = new FileInputStream(file)) {
            b = new byte[(int) file.length()];
            in.read(b);
        } // Closes in
Java 7中的哪一个更容易:

        b = Files.readAllBytes(file.toPath());
或立即使用路径i.o.文件:

        Path path = Paths.get("C:\\Users\\khurt\\Desktop\\xml.txt");
        b = Files.readAllBytes(path);
由于Base64仅使用ASCII do:

        String encoded = new String(b, StandardCharsets.US_ASCII);
将Base64文本解析为字节[]

        b = DatatypeConverter.parseBase64Binary(encoded);
如果要将XML作为文本,请执行以下操作:

        String decoded = new String(b, StandardCharsets.UTF_8);

顺便说一下,XML以Unicode BOM字符\ufeff开头,这是冗余的。

文本文件中的这些字节在我看来非常像base64…它是base64。。。有人告诉我这是一样的。我想他们是不同的?java是否有base64的特定变量?base64是用ASCII文本表示二进制数据的一种方法。但是实际文件的字节会有很大的不同,特别是,每个文本字符可能有一个字节。老实说,还不完全清楚您要做什么。您需要先解码Base64,然后才能将其解析为XML。您的同事的程序可能已经做到了,但您还没有在中构建该功能。Re:java是否有base64的特定变量?IIRC有一个处理base64的Apache Commons包。我有一个base64字符的文本文件,我需要将该文本文件作为输出—它是正确的XML文件。很抱歉给你带来了困惑。如果我将文本文件转换为字节,然后对字节进行解码,我会收到正确的字符吗?这只是我正在编写的代码的一小部分,我需要能够下载各种文件,现在的问题只是base 64转换,我使用了DatatypeConverter,它确实将我的数组转换为base64,但它与文件不匹配。谢谢,我在解析文件的字节时发现了错误,而不是获取字符串,然后解析该字符串