java - 编写器在关闭时不将文本写入子目录中的文件

标签 java file

我有一个非常简单的操作,将一些文本写入子目录中的文件。根据我见过的所有教程,这应该可行,但文件每次都保持为空。它在不写入子目录时有效,不会引发异常。

File file = new File("./Decks");

public void saveDeck(Deck deck) {
    File deckFile = new File(file, deck.getName() + ".xml");

    try {
        if(!deckFile.exists()){
            deckFile.createNewFile();
        }


        Writer writer = new BufferedWriter(new OutputStreamWriter(
                new FileOutputStream(deckFile.getName()), "utf-8"));
        writer.write(deck.toXml());
        writer.close();

    } catch (IOException x) {
        System.err.format("IOException: %s%n", x);
    }

}

甲板类如下所示:

public class Deck {
String name;
String cardLocation;

public Deck(String name, String cardLocation) {
    this.name = name;
    this.cardLocation = cardLocation;
}

public String toXml(){
    StringBuilder builder = new StringBuilder();
    builder.append("<?xml version=\"1.0\" encoding=\"utf-8\" ?> \n");
    builder.append("<deck> \n");
    builder.append("<name> " + this.name + " </name> \n");
    builder.append("<cardLocation> " + this.cardLocation + " </cardLocation> \n");
    builder.append("</deck> \n");
    return builder.toString();
}

public String getName() {
    return name;
}

public String getCardLocation() {
    return cardLocation;
}
}

最佳答案

File.getName() 返回路径的文件名部分, 没有父目录。

鉴于此:

File file = new File("./Decks");

// ...

File deckFile = new File(file, deck.getName() + ".xml");

deckFile.getName() 的结果是 deck.getName() + ".xml"。 路径部分丢失。

因此解决方法是简单地将 deckFile.getName() 替换为 deckFile:

Writer writer = new BufferedWriter(new OutputStreamWriter(
        new FileOutputStream(deckFile), "utf-8"));
writer.write(deck.toXml());
writer.close();

关于java - 编写器在关闭时不将文本写入子目录中的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47189337/

相关文章:

Java getClassLoader().getResourceAsStream(文件名)

java - 从预先存在的应用程序创建 Web 应用程序

c - 对使用 O_DIRECT 打开的文件执行 'write' 后的用户缓冲区

java - System.nanoTime() 是否保证返回唯一值?

c++ ostringstream 提高 IO 性能?

java - Android ArrayList 的自定义对象问题

java - Android:如何更改圆形进度条上的自定义颜色

java - 基于另一个 XPath 元素查找元素的 XPath

java - 使用阿拉伯字符创建 zip 文件

c# - 如何将内存中的位图保存到 ZipArchive,而不先将位图保存到文件系统?