GVKun编程网logo

使用Java Nio创建子目录和文件(java如何创建一个目录)

5

如果您对使用JavaNio创建子目录和文件和java如何创建一个目录感兴趣,那么这篇文章一定是您不可错过的。我们将详细讲解使用JavaNio创建子目录和文件的各种细节,并对java如何创建一个目录进行

如果您对使用Java Nio创建子目录和文件java如何创建一个目录感兴趣,那么这篇文章一定是您不可错过的。我们将详细讲解使用Java Nio创建子目录和文件的各种细节,并对java如何创建一个目录进行深入的分析,此外还有关于delphi – 删除具有非空子目录和文件的目录、html – 子目录和文件上的自动图标、Java 7 的文件操作:创建目录和读取目录内容、Java IO创建目录和文件实例代码的实用技巧。

本文目录一览:

使用Java Nio创建子目录和文件(java如何创建一个目录)

使用Java Nio创建子目录和文件(java如何创建一个目录)

我正在创建一个简单的程序,尝试从磁盘中读取“ conf / conf.xml”,但是如果此文件或目录不存在,则会创建它们。

我可以使用以下代码执行此操作:

    // create subdirectory path    Path confDir = Paths.get("./conf");    // create file-in-subdirectory path    Path confFile = Paths.get("./conf/conf.xml");    // if the sub-directory doesn''t exist then create it    if (Files.notExists(confDir)) {         try { Files.createDirectory(confDir); }        catch (Exception e ) { e.printStackTrace(); }    }    // if the file doesn''t exist then create it    if (Files.notExists(confFile)) {        try { Files.createFile(confFile); }        catch (Exception e ) { e.printStackTrace(); }    }

我的问题是,这是否真的是最优雅的方式?需要创建两个简单的路径以在新的子目录中创建新文件似乎多余。

答案1

小编典典

您可以将声明confFile为,File而不是Path。然后,您可以使用confFile.getParentFile().mkdirs();,请参见下面的示例:

// ...File confFile = new File("./conf/conf.xml"); confFile.getParentFile().mkdirs();// ...

或者,按原样使用代码,您可以使用:

Files.createDirectories(confFile.getParent());

delphi – 删除具有非空子目录和文件的目录

delphi – 删除具有非空子目录和文件的目录

如何删除一个包含某些文件和一些非空子目录的目录.
我试过 SHFileOperation Function.它在 Windows 7有一些兼容性问题.
然后我尝试了 IFileOperation Interface.但它在Windows XP中不兼容.
然后我按照 David Heffernan的建议尝试了以下代码:

procedure TMainForm.BitBtn01Click(Sender: TObject);
var
  FileAndDirectoryExist: TSearchRec;
  ResourceSavingPath : string;
begin
  ResourceSavingPath := (Getwindir) + 'Web\Wallpaper\';
  if FindFirst(ResourceSavingPath + '\*',faAnyFile,FileAndDirectoryExist) = 0 then
  try
    repeat
      if (FileAndDirectoryExist.Name <> '.') and (FileAndDirectoryExist.Name <> '..') then
        if (FileAndDirectoryExist.Attr and faDirectory) <> 0 then
          //it's a directory,empty it
          ClearFolder(ResourceSavingPath +'\' + FileAndDirectoryExist.Name,mask,recursive)
        else
          //it's a file,delete it
          DeleteFile(ResourceSavingPath + '\' + FileAndDirectoryExist.Name);
    until FindNext(FileAndDirectoryExist) <> 0;
    //Now that this directory is empty,we can delete it
    RemoveDir(ResourceSavingPath);
  finally
    FindClose(FileAndDirectoryExist);
  end;
end;

但它没有在ClearFolder,掩码和递归中编译提到错误为Undeclared Identifier.我的要求是“如果WALLPAPER文件夹下存在任何子文件夹,它将被删除”.相同的子文件夹可以包含任意数量的非空子文件夹或文件.

解决方法

好吧,首先,SHFileOperation在Windows 7或Windows 8上没有兼容性问题.是的,现在建议您使用IFileOperation.但是如果你想支持像XP这样的旧操作系统,那么你可以而且应该只调用SHFileOperation.它工作并将继续工作.在Windows 7和Windows 8上使用它是完全正常的,如果它从Windows中删除,我会吃掉我的帽子.微软竭尽全力保持向后兼容性.因此,在我看来,SHFileOperation是您的最佳选择.

您的基于FindFirst的方法失败,因为您需要将其放在单独的函数中以允许递归.我在其他答案中发布的代码不完整.这是一个完整的版本:

procedure DeleteDirectory(const Name: string);
var
  F: TSearchRec;
begin
  if FindFirst(Name + '\*',F) = 0 then begin
    try
      repeat
        if (F.Attr and faDirectory <> 0) then begin
          if (F.Name <> '.') and (F.Name <> '..') then begin
            DeleteDirectory(Name + '\' + F.Name);
          end;
        end else begin
          DeleteFile(Name + '\' + F.Name);
        end;
      until FindNext(F) <> 0;
    finally
      FindClose(F);
    end;
    RemoveDir(Name);
  end;
end;

这将删除目录及其内容.您需要遍历顶级目录,然后为找到的每个子目录调用此函数.

html – 子目录和文件上的自动图标

html – 子目录和文件上的自动图标

我的朋友最近在他的VPS上为我提供了一些磁盘空间,并让我使用了http:// IP / czdavid /.我目前不需要域名,因为它将作为文件共享站点提供给我.

现在,问题是他在IP的根目录上有他的图标,浏览器在那里搜索它.我可以使用< link rel =“快捷图标”type =“image / x-icon”href =“favicon.ico”/>来解决单个页面上的问题,问题是目录列表和实际文件 – 图像和文本文件和其他在浏览器中打开 – 将显示域favicon.

有没有办法为整个子目录设置一个favicon,而不是获取域名?

最佳答案
不,这是不可能的.

除非在HTML页面上的链接元素中指定,否则将从站点的根目录检索favicon.ico.

Java 7 的文件操作:创建目录和读取目录内容

Java 7 的文件操作:创建目录和读取目录内容

我们来看看 Java 7 怎样对目录进行操作。首先我们来看看怎样列出一个文件系统中所有的更目录,就象我们在 Windows中 看到有多少硬盘分区(包括光盘等)。要得到这些信息,可以调用

FileSystem.getRootDirectories 方法。该方法返回一个 Iterable对象,我们可以遍历该对象得到所有 的根目录。该对象中的 每个元素都是一个 Path对象。具体的代码例子如下:

  1. import java.nio.file.FileSystems;  
  2.   
  3. import java.nio.file.Path;  
  4.   
  5.   
  6. public class RootDirectoryReader {  
  7.   
  8.         public static void main(String[] args){  
  9.   
  10.             Iterable<Path> dirs = FileSystems.getDefault().getRootDirectories();  
  11.   
  12.             for (Path name: dirs) {  
  13.   
  14.                 System.err.println(name);  
  15.   
  16.             }  
  17.   
  18.   
  19.         }  
  20.   
  21. }  
import java.nio.file.FileSystems;

import java.nio.file.Path;


public class RootDirectoryReader {

        public static void main(String[] args){

            Iterable<Path> dirs = FileSystems.getDefault().getRootDirectories();

            for (Path name: dirs) {

                System.err.println(name);

            }


        }

}
 

在 我的机器上运行该代码的输出如下:
C:\
D:\
E:\
F:\
G:\
在我的机器上, C盘是本地硬盘, D盘是光驱,其他 3个是移动硬盘的分区。

我们可以调用 Path类的 createDirectory方法来创建文件。如 果调用该方法是不传递任何参数,那么生成 的新的目录就拥有默认的属性。下面的代码就是创建一个拥有默认属性的新目录:

  1. Path dir = Paths.get("C:\\temp");  
  2.   
  3. try {  
  4.   
  5.     path.createDirectory();  
  6.   
  7. catch (IOException x) {  
  8.   
  9.     System.err.println(x);  
  10.   
  11. }  
    Path dir = Paths.get("C:\\temp");

    try {

        path.createDirectory();

    } catch (IOException x) {

        System.err.println(x);

    }
 

下面的代码是在 POSIX文件系统上创建一个拥有指定的属性的目 录:

  1. Set<PosixFilePermission> perms = PosixFilePermissions.fromString("rwxr-x---");  
  2.   
  3. FileAttribute<Set<PosixFilePermission>> attr = PosixFilePermissions.asFileAttribute(perms);  
  4.   
  5. try {  
  6.   
  7.      file.createDirectory(attr);  
  8.   
  9. catch (IOException x) {  
  10.   
  11.      System.err.println(x);  
  12.   
  13. }  
    Set<PosixFilePermission> perms = PosixFilePermissions.fromString("rwxr-x---");

    FileAttribute<Set<PosixFilePermission>> attr = PosixFilePermissions.asFileAttribute(perms);

    try {

         file.createDirectory(attr);

    } catch (IOException x) {

         System.err.println(x);

    }

要 想创建一个多层的目录,如 c:\temp\first\abc这样的目录,我 们可以使用 Files类的 createDirectories方法。这个方法 接受 Path类作为第一个参数,第二个参数是可选的参数 FileAttribute。下面的代码创建具有缺 省属性的多层目录:

  1. try {  
  2.   
  3.      Files.createDirectories(Paths.get("c:\\temp\\first\\abc"));  
  4.   
  5. catch (IOException x) {  
  6.   
  7.      System.err.println(x);  
  8.   
  9. }  
    try {

         Files.createDirectories(Paths.get("c:\\temp\\first\\abc"));

    } catch (IOException x) {

         System.err.println(x);

    }


 

从 最上层开始,如果目录不存在,这创建新的目录。例如如果上面的目录层次中, c:\temp已经存在,则不再创建; c:\temp\first不存在,则直 接在 c:\temp下创建 first目录,然后在 first目录下创建 abc目录。
调用该方法的时候要注意该方法并不是原子操 作,也就是说目录层次可能有一部分成功,一部分失败。如上面的例子中,可能 first目录创建成功了,但是 abc目录创建失败了。

要想列出目录中所有的内容,可以调 用 newDirectoryStream()方法。该 方法返回一个实现了 DirectoryStream接口的对象。实 现了 DirectoryStream的对象同时也实现了 Iterable接口,因此我们可以遍历该对象。遍 历时得到的元素都是 Path对象。同时要注意的 是返回的 DirectoryStream也是一个流对象,别 忘记使用完之后关闭该对象。
下面是示例代码:

  1. Path dir = Paths.get("c:\\");     
  2.   
  3. DirectoryStream<Path> stream = null;  
  4.   
  5.     try {  
  6.   
  7.         stream = dir.newDirectoryStream();  
  8.   
  9.         for (Path file: stream) {  
  10.   
  11.             System.out.println(file.getName());  
  12.   
  13.         }  
  14.   
  15.     } catch (IOException x) {  
  16.   
  17.         //IOException can never be thrown by the iteration.  
  18.   
  19.         //In this snippet, it can only be thrown by newDirectoryStream.  
  20.   
  21.         System.err.println(x);  
  22.   
  23.     } finally {  
  24.   
  25.         if (stream != null) stream.close();  
  26.   
  27.     }  
Path dir = Paths.get("c:\\");   

DirectoryStream<Path> stream = null;

    try {

        stream = dir.newDirectoryStream();

        for (Path file: stream) {

            System.out.println(file.getName());

        }

    } catch (IOException x) {

        //IOException can never be thrown by the iteration.

        //In this snippet, it can only be thrown by newDirectoryStream.

        System.err.println(x);

    } finally {

        if (stream != null) stream.close();

    }


如果我们查找名字符合某些模式的文件或者只目录,我们可以调用 newDirectoryStream(String)方法。这个方法会调用一个内置的过滤 器来过滤返回的结果。关于模式的使用我们在前面的文章里已经讲过了。下面是具体的例子:

  1. Path dir = ...;  
  2.   
  3. DirectoryStream<Path> stream = null;  
  4.   
  5. try {  
  6.   
  7.     stream = dir.newDirectoryStream("*.{java,class,jar}");  
  8.   
  9.     for (Path entry: stream) {  
  10.   
  11.         System.out.println(entry.getName());  
  12.   
  13.     }  
  14.   
  15. catch (IOException x) {  
  16.   
  17.     //IOException can never be thrown by the iteration.  
  18.   
  19.     //In this snippet, it can only be thrown by newDirectoryStream.  
  20.   
  21.     System.err.println(x);  
  22.   
  23. finally {  
  24.   
  25.     if (stream != null) stream.close()  
  26.   
  27. }  
    Path dir = ...;

    DirectoryStream<Path> stream = null;

    try {

        stream = dir.newDirectoryStream("*.{java,class,jar}");

        for (Path entry: stream) {

            System.out.println(entry.getName());

        }

    } catch (IOException x) {

        //IOException can never be thrown by the iteration.

        //In this snippet, it can only be thrown by newDirectoryStream.

        System.err.println(x);

    } finally {

        if (stream != null) stream.close()

    }

在 这个例子中,我们只返回以 .java .class .jar结尾的文件或子目录。

我们还可以实现自己的过滤器。例如 如果我们只需要得到所有的子目录,对于文件我们不需要返回,我们就可以编写自己的过滤器。自己的过滤器要实现 DirectoryStream.Filter<T>接口,这个接口只有一个方法 accept,这个方法决定一个文件 /目录是否符合查询条 件。下面是具体的代码:

  1. DirectoryStream.Filter<Path> filter = newDirectoryStream.Filter<Path>() {  
  2.   
  3.     public boolean accept(Path file) {  
  4.   
  5.         try {  
  6.   
  7.             boolean isDirectory = Attributes.readBasicFileAttributes(file).isDirectory();  
  8.   
  9.             return (isDirectory);  
  10.   
  11.         } catch (IOException x) {  
  12.   
  13.             //Failed to determine if it''s a directory.  
  14.   
  15.             System.err.println(x);  
  16.   
  17.             return false;  
  18.   
  19.         }  
  20.   
  21.     }  
  22.   
  23. }  
    DirectoryStream.Filter<Path> filter = newDirectoryStream.Filter<Path>() {

        public boolean accept(Path file) {

            try {

                boolean isDirectory = Attributes.readBasicFileAttributes(file).isDirectory();

                return (isDirectory);

            } catch (IOException x) {

                //Failed to determine if it''s a directory.

                System.err.println(x);

                return false;

            }

        }

    }


当 过滤器创建好之后,我们可以通过 newDirectoryStream(DirectoryStream.Filter<? super Path>)方法来使用它。下面 就是一个实现的例子:

  1. Path dir = ...;  
  2.   
  3. DirectoryStream<Path> stream = null;  
  4.   
  5. try {  
  6.   
  7.     stream = dir.newDirectoryStream(filter);  
  8.   
  9.     for (Path entry: stream) {  
  10.   
  11.         System.out.println(entry.getName());  
  12.   
  13.     }  
  14.   
  15. catch (IOException x) {  
  16.   
  17.     System.err.println(x);  
  18.   
  19. finally {  
  20.   
  21.     stream.close();  
  22.   

Java IO创建目录和文件实例代码

Java IO创建目录和文件实例代码

本篇文章给大家分享了Java IO创建目录和文件的实例代码,过程很简单,大家可以测试参考下。

我们先来看下具体代码:

import java.io.File; import java.io.IOException; public class CreatFile{ public static void main(String[] args) { File newDir=new File("D:/test"); //声明磁盘目录 File newFile = new File(newDir,"test.txt"); //声明目录文件 boolean newCreatDir=newDir.exists(); boolean newCreatFile=newFile.exists(); //创建目录及文件 if(newCreatDir==false){ try{ //异常监听 newDir.mkdirs(); //创建目录 System.out.println(newDir.getAbsolutePath()+"目录已创建"); newFile.createNewFile(); //创建文件 System.out.println(newFile.getAbsolutePath()+"文件已创建"); } catch(IOException e){ //捕捉异常 e.printstacktrace(); //在命令行打印异常信息在程序中出错的位置及原因 } } else{ System.out.println(newDir.getAbsolutePath()+"目录已存在"); } if(newCreatFile==true){ System.out.println(newFile.getAbsolutePath()+"文件已存在"); } } }

说明:

创建目录的方法,mkdirs();或者mkdir(); 区别在于mkdirs()可以多级创建。

创建文件方法,createNewFile();

关于使用Java Nio创建子目录和文件java如何创建一个目录的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于delphi – 删除具有非空子目录和文件的目录、html – 子目录和文件上的自动图标、Java 7 的文件操作:创建目录和读取目录内容、Java IO创建目录和文件实例代码等相关知识的信息别忘了在本站进行查找喔。

本文标签: