Java 由于文件路径中存在空间,在创建xml文件时出错

Java 由于文件路径中存在空间,在创建xml文件时出错,java,xml-parsing,Java,Xml Parsing,我正在创建一个xml文件。对此代码没有问题 TransformerFactory transformerFactory = TransformerFactory.newInstance(); Transformer transformer = transformerFactory.newTransformer(); DOMSource source = new DOMSource(doc); String fileName="D:\\Doc\\File.xml"; StreamResult re

我正在创建一个xml文件。对此代码没有问题

TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
DOMSource source = new DOMSource(doc);
String fileName="D:\\Doc\\File.xml";
StreamResult result = new StreamResult(new File(fileName));
transformer.transform(source, result);
但如果道路是

String fileName="D:\\My Doc\\File.xml";
然后是投掷错误

XML-22110: (Fatal Error) Invalid StreamResult set in TransformerHandler.

我认为文件路径中的空间造成了问题。如何解决这个问题?

我确信空间不是问题所在。我刚刚运行了这段代码,它运行得非常好:

package io;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintStream;

/**
 * FileWithSpace description here
 * @author Michael
 * @link
 * @since 7/24/12 5:03 AM
 */
public class FileWithSpace {
    public static void main(String[] args) {
        try {
            File dir = new File("J:\\Path With Spaces");
            boolean exists = dir.mkdirs();
            if (exists) {
                File f = new File("J:\\Path With Spaces\\test.txt");
                FileOutputStream fos = new FileOutputStream(f);
                PrintStream ps = new PrintStream(fos);
                ps.println("This is a test");
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

请注意,在将文件写入目录之前,我确实创建了目录。
C:\\My Docs
在开始之前是否存在?如果没有,请添加
mkdirs()
步骤,如图所示。如果在创建
FileOutputStream

之前不创建目录,我的简单示例将失败。我确信空间不是问题所在。我刚刚运行了这段代码,它运行得非常好:

package io;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintStream;

/**
 * FileWithSpace description here
 * @author Michael
 * @link
 * @since 7/24/12 5:03 AM
 */
public class FileWithSpace {
    public static void main(String[] args) {
        try {
            File dir = new File("J:\\Path With Spaces");
            boolean exists = dir.mkdirs();
            if (exists) {
                File f = new File("J:\\Path With Spaces\\test.txt");
                FileOutputStream fos = new FileOutputStream(f);
                PrintStream ps = new PrintStream(fos);
                ps.println("This is a test");
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

请注意,在将文件写入目录之前,我确实创建了目录。
C:\\My Docs
在开始之前是否存在?如果没有,请添加
mkdirs()
步骤,如图所示。如果在创建
FileOutputStream

之前不创建目录,我的简单示例将失败。您需要将该文件视为FileOutputStream。如果不这样做,文件名将被视为URI

Transformer transformer = TransformerFactory.newInstance().newTransformer();
Result output = new StreamResult( new FileOutputStream( absolutePath ) );
Source input = new DOMSource( XMLDoc );
transformer.transform(input, output);

注意:也要回答上面的问题:问题特定于XML转换器。当您只是创建一个用于写入的文件时,不会发生这种情况。

您需要将该文件视为一个FileOutputStream。如果不这样做,文件名将被视为URI

Transformer transformer = TransformerFactory.newInstance().newTransformer();
Result output = new StreamResult( new FileOutputStream( absolutePath ) );
Source input = new DOMSource( XMLDoc );
transformer.transform(input, output);

注意:也要回答上面的问题:问题特定于XML转换器。如果您只是创建一个文件进行写入,则不会发生这种情况。

我不知道空间是否是您的问题,但如果是这样,您可以通过使用单个\来转义空间来解决它,例如:
String fileName=“D:\\My\Doc\\file.xml”。我目前不在我的工作机器上,所以我无法检查是否是这种情况,但我希望这能有所帮助。@norfavrell编译器错误为coming@SweetDream,可以发布异常堆栈跟踪吗?这可能很有用。@defaultlocale只有上面的错误才会打印出来console@SweetDream,您是否尝试捕获可丢弃的文件并打印堆栈跟踪?在这里了解错误类型和堆栈跟踪很有帮助。我不知道空间是否是您的问题,但如果是这样,您可以通过使用单个\来转义空间来解决它,例如:
String fileName=“D:\\My\Doc\\File.xml”。我目前不在我的工作机器上,所以我无法检查是否是这种情况,但我希望这能有所帮助。@norfavrell编译器错误为coming@SweetDream,可以发布异常堆栈跟踪吗?这可能很有用。@defaultlocale只有上面的错误才会打印出来console@SweetDream,您是否尝试捕获可丢弃的文件并打印堆栈跟踪?在这里了解错误类型和堆栈跟踪很有帮助。