0

我在 cwd 的文件夹中创建文件时遇到了一些问题 - 我最近从 windows 切换到 mac,看起来文件的创建方式存在一些细微的差异。

    String servername = "123";
    URL url = null;
    URLConnection con = null;
    int i;
    try {
            File parentFolder = new File("test2");
            System.out.println("folder.exists():"+folder.exists()); // true
            System.out.println("folder.isDirectory():"+folder.isDirectory()); // true

            url = new URL("http://"+servername+".foo.com:8080/foo.bar");
            con = url.openConnection();
            File file = new File(parentFolder, servername+"the_file.out");

            file.getParentFile().mkdirs();

            BufferedInputStream bis = new BufferedInputStream(
                            con.getInputStream());
            BufferedOutputStream bos = new BufferedOutputStream(
                            new FileOutputStream(file.getName()));
            while ((i = bis.read()) != -1) {
                    bos.write(i);
            }
            bos.flush();
            bis.close();
    } catch (MalformedInputException malformedInputException) {
            malformedInputException.printStackTrace();
    } catch (IOException ioException) {
            ioException.printStackTrace();
    }

在此代码段中,我正在从某个网页下载文件并尝试将其保存在我的项目根目录中名为“test2”的文件夹中。

结果:

MyProject
  test2
  src
  build
  nbproject
  123the_file.out // why doesn't it go into test2?

请注意,该文件可以正确下载和写入,但同样不在正确的目录中。

4

2 回答 2

3

代替

new FileOutputStream(file.getName()));

new FileOutputStream(file);

您的file对象包含文件的文件夹和名称。您需要将整个文件对象传递给 FileOutputStream。您对其进行编码的方式仅传递名称字符串123the_file.out,因此 FileOutputStream 将其解释为相对于您的 cwd

于 2012-11-28T20:22:51.320 回答
1

请参阅 JavadocFile.getName()

返回此抽象路径名表示的文件或目录的名称。这只是路径名的名称序列中的最后一个名称。如果路径名的名称序列为空,则返回空字符串。

如果将 a 传递StringFileOutputStream构造函数,它会尝试找出名称代表的内容,并选择foo在当前目录中命名的文件。如果要携带File对象中包含的所有信息(包括父目录test2),只需传递对象本身。

于 2012-11-28T20:28:02.433 回答