| // |
| // ======================================================================== |
| // Copyright (c) 1995-2017 Mort Bay Consulting Pty. Ltd. |
| // ------------------------------------------------------------------------ |
| // All rights reserved. This program and the accompanying materials |
| // are made available under the terms of the Eclipse Public License v1.0 |
| // and Apache License v2.0 which accompanies this distribution. |
| // |
| // The Eclipse Public License is available at |
| // http://www.eclipse.org/legal/epl-v10.html |
| // |
| // The Apache License v2.0 is available at |
| // http://www.opensource.org/licenses/apache2.0.php |
| // |
| // You may elect to redistribute this code under either of these licenses. |
| // ======================================================================== |
| // |
| |
| package org.eclipse.jetty.start; |
| |
| import java.io.Closeable; |
| import java.io.File; |
| import java.io.IOException; |
| import java.nio.file.FileSystems; |
| import java.nio.file.Files; |
| import java.nio.file.Path; |
| import java.nio.file.attribute.FileTime; |
| import java.util.Locale; |
| |
| public class FS |
| { |
| public static boolean canReadDirectory(Path path) |
| { |
| return Files.exists(path) && Files.isDirectory(path) && Files.isReadable(path); |
| } |
| |
| public static boolean canReadFile(Path path) |
| { |
| return Files.exists(path) && Files.isRegularFile(path) && Files.isReadable(path); |
| } |
| |
| public static boolean canWrite(Path path) |
| { |
| return Files.isWritable(path); |
| } |
| |
| public static void close(Closeable c) |
| { |
| if (c == null) |
| { |
| return; |
| } |
| |
| try |
| { |
| c.close(); |
| } |
| catch (IOException ignore) |
| { |
| /* ignore */ |
| } |
| } |
| |
| public static boolean createNewFile(Path path) throws IOException |
| { |
| Path ret = Files.createFile(path); |
| return Files.exists(ret); |
| } |
| |
| public static boolean ensureDirectoryExists(Path dir) throws IOException |
| { |
| if (exists(dir)) |
| { |
| // exists already, nothing to do |
| return false; |
| } |
| Files.createDirectories(dir); |
| return true; |
| } |
| |
| public static void ensureDirectoryWritable(Path dir) throws IOException |
| { |
| if (!Files.exists(dir)) |
| { |
| throw new IOException("Path does not exist: " + dir.toAbsolutePath()); |
| } |
| if (!Files.isDirectory(dir)) |
| { |
| throw new IOException("Directory does not exist: " + dir.toAbsolutePath()); |
| } |
| if (!Files.isWritable(dir)) |
| { |
| throw new IOException("Unable to write to directory: " + dir.toAbsolutePath()); |
| } |
| } |
| |
| public static boolean exists(Path path) |
| { |
| return Files.exists(path); |
| } |
| |
| public static boolean isValidDirectory(Path path) |
| { |
| if (!Files.exists(path)) |
| { |
| // doesn't exist, not a valid directory |
| return false; |
| } |
| |
| if (!Files.isDirectory(path)) |
| { |
| // not a directory (as expected) |
| StartLog.warn("Not a directory: " + path); |
| return false; |
| } |
| |
| return true; |
| } |
| |
| public static boolean isXml(String filename) |
| { |
| return filename.toLowerCase(Locale.ENGLISH).endsWith(".xml"); |
| } |
| |
| public static String toRelativePath(File baseDir, File path) |
| { |
| return baseDir.toURI().relativize(path.toURI()).toASCIIString(); |
| } |
| |
| public static boolean isPropertyFile(String filename) |
| { |
| return filename.toLowerCase(Locale.ENGLISH).endsWith(".properties"); |
| } |
| |
| public static String separators(String path) |
| { |
| StringBuilder ret = new StringBuilder(); |
| for (char c : path.toCharArray()) |
| { |
| if ((c == '/') || (c == '\\')) |
| { |
| ret.append(File.separatorChar); |
| } |
| else |
| { |
| ret.append(c); |
| } |
| } |
| return ret.toString(); |
| } |
| |
| public static Path toPath(String path) |
| { |
| return FileSystems.getDefault().getPath(FS.separators(path)); |
| } |
| |
| public static void touch(Path path) throws IOException |
| { |
| FileTime now = FileTime.fromMillis(System.currentTimeMillis()); |
| Files.setLastModifiedTime(path,now); |
| } |
| |
| public static Path toRealPath(Path path) throws IOException |
| { |
| return path.toRealPath(); |
| } |
| } |