使用具有完整路径的 FileWriter

Posted

技术标签:

【中文标题】使用具有完整路径的 FileWriter【英文标题】:Using the FileWriter with a full path 【发布时间】:2013-07-17 02:48:54 【问题描述】:

我在创建 FileWriter 时指定了文件位置的完整路径,但我没有看到正在创建的文件。在文件创建过程中我也没有收到任何错误。

这是我的代码的 sn-p:

public void writeToFile(String fullpath, String contents) 
    File file = new File(fullpath, "contents.txt");
    if (!file.exists()) 
        try 
            file.createNewFile();
         catch (IOException e) 
            e.printStackTrace();
        
    
    try 
        BufferedWriter bw = new BufferedWriter(new FileWriter(file.getAbsoluteFile()));
        bw.write(contents);
        bw.close();
     catch (IOException e) 
        e.printStackTrace();
    

完整路径是"D:/codes/sources/logs/../../bin/logs"。 我已经搜索了整个目录,但在任何地方都找不到该文件。 如果我只指定文件名 [File file = new File("contents.txt");] ,它可以保存文件的内容,但它不会放在我的首选位置。

如何将文件内容保存到首选位置?

更新: 我使用 file.getAbsolutePath() 打印了完整路径,并且得到了正确的目录路径。 [D:\codes\sources\logs....\bin\logs\contents.txt] 但是当我在目录中查找文件时,我找不到它。

【问题讨论】:

你真的有“../..”吗?如果是这样,您需要查看D:/codes/bin/logs 对于 Java 7,您也可以这样做:Files.write(Paths.get(fullPath), contents.getBytes("UTF-8")); createNewFile() 不需要。 文件正在创建,但不是您正在查找的位置,除非出现异常。 exists()/createNewFile() 块完全浪费时间和空间。 new FileWriter() 无论如何都会导致操作系统这样做,现在您正在强制它添加对您刚刚创建的文件的删除。不要编写无意义的代码。 new FileWriter(file) 也可以。 您是否尝试过查看file.getCanonicalPath() 返回的内容?是你预期的吗? 【参考方案1】:

确保向路径参数添加尾部反斜杠,以便将路径识别为目录。提供的示例适用于使用转义的反斜杠的 Windows 操作系统。要获得更稳健的方法,请使用系统的 file.separator 属性。

作品

writeToFile("D:\\Documents and Settings\\me\\Desktop\\Development\\",
                "this is a test");

不起作用

writeToFile("D:\\Documents and Settings\\me\\Desktop\\Development",
                "this is a test");

文件分隔符示例

String fs = System.getProperty("file.separator");
String path = fs + "Documents and Settings" + fs + "me" + fs
        + "Desktop" + fs + "Development" + fs;
writeToFile(path, "this is a test");

【讨论】:

我通过 file.getAbsolutePath() 打印了绝对路径,并且得到了正确的目录结构。例如D:\codes\sources\logs\..\..\bin\logs\contents.txt。 由于 OP 使用 File 对象来构造路径,因此无需获取分隔符并将完整路径与字符串连接。 构造函数File(String parent, String child) 不关心尾随(反)斜杠(参见the javadocs)。

以上是关于使用具有完整路径的 FileWriter的主要内容,如果未能解决你的问题,请参考以下文章

无法在 Python 中写入具有完整路径的文件

桥接头仅查找具有完整路径的文件

在 Windows cmd 中,如何在当前目录中运行可执行文件(而不是在 %PATH% 中具有相同名称的可执行文件)而不参考完整路径? [关闭]

如何使用c#从google驱动器api获取文件夹的完整路径

备份具有完整历史记录的SVN存储库

使用 Python 从仅具有基本名称的 tarfile 中提取文件