FileIOSystem interface

Пакет: com.hypixel.hytale.procedurallib.file

Файл: com/hypixel/hytale/procedurallib/file/FileIOSystem.java

extends: AutoCloseable

Поля (8)

МодификаторыТипИмя
private static final FileIOSystem.Provider.DefaultIOFileSystem DEFAULT
private static final Path DEFAULT_ROOT
private static final ThreadLocal<FileIOSystem> HOLDER
private Path base
final Path[] paths
private FileIOSystem.PathArray roots
Path var2
AssetPath var7

Методы (13)

МодификаторыВозвратСигнатура
private DefaultIOFileSystemprivate DefaultIOFileSystem()
abstract throw new FileNotFoundExceptionthrow new FileNotFoundException("Unable to find file: " + var1)
public PathArraypublic PathArray(Path... var1)
public Providerpublic Provider()
public synchronized Path baseRootpublic synchronized Path baseRoot()
public Path getpublic Path get(int var1)
static FileIOSystem getstatic FileIOSystem get()
public synchronized FileIOSystem.PathArray rootspublic synchronized FileIOSystem.PathArray roots()
static void setstatic void set(@Nonnull FileIOSystem var0)
public synchronized void setBasepublic synchronized void setBase(Path var1)
static void setRootstatic void setRoot(@Nonnull Path var0)
public int sizepublic int size()
static void unsetstatic void unset()

Исходный код

Показать/скрыть
class="kw">package com.hypixel.hytale.procedurallib.file;

class="kw">import java.io.FileNotFoundException;
class="kw">import java.io.IOException;
class="kw">import java.io.InputStream;
class="kw">import java.nio.file.Files;
class="kw">import java.nio.file.Path;
class="kw">import java.nio.file.Paths;
class="kw">import javax.annotation.Nonnull;

class="kw">public class="kw">interface FileIOSystem class="kw">extends AutoCloseable {
   @Nonnull
   Path baseRoot();

   @Nonnull
   FileIOSystem.PathArray roots();

   @Nonnull
   class="kw">default AssetPath resolve(@Nonnull Path var1) {
      Path var2 = FileIO.relativize(var1, this.baseRoot());

      for (Path var6 : this.roots().paths) {
         AssetPath var7 = AssetPath.fromRelative(var6, var2);
         if (FileIO.exists(var7)) {
            class="kw">return var7;
         }
      }

      class="kw">return AssetPath.fromRelative(this.baseRoot(), var2);
   }

   @Nonnull
   class="kw">default <T> T load(@Nonnull AssetPath var1, @Nonnull AssetLoader<T> var2) class="kw">throws IOException {
      if (!Files.exists(var1.filepath())) {
         throw new FileNotFoundException("Unable to find file: " + var1);
      }

      try (InputStream var3 = Files.newInputStream(var1.filepath())) {
         class="kw">return var2.load(var3);
      }
   }

   @Override
   class="kw">default void close() {
   }

   class="kw">final class PathArray {
      class="kw">final Path[] paths;

      class="kw">public PathArray(Path... var1) {
         this.paths = var1;
      }

      class="kw">public int size() {
         class="kw">return this.paths.length;
      }

      class="kw">public Path get(int var1) {
         class="kw">return this.paths[var1];
      }
   }

   class="kw">final class Provider {
      class="kw">private class="kw">static class="kw">final FileIOSystem.Provider.DefaultIOFileSystem DEFAULT = new FileIOSystem.Provider.DefaultIOFileSystem();
      class="kw">private class="kw">static class="kw">final ThreadLocal<FileIOSystem> HOLDER = ThreadLocal.withInitial(() -> DEFAULT);

      class="kw">public Provider() {
      }

      class="kw">static FileIOSystem get() {
         class="kw">return HOLDER.get();
      }

      class="kw">static void set(@Nonnull FileIOSystem var0) {
         HOLDER.set(var0);
      }

      class="kw">static void unset() {
         HOLDER.set(DEFAULT);
      }

      class="kw">static void setRoot(@Nonnull Path var0) {
         DEFAULT.setBase(var0);
      }

      class="kw">private class="kw">static class="kw">final class DefaultIOFileSystem class="kw">implements FileIOSystem {
         class="kw">private class="kw">static class="kw">final Path DEFAULT_ROOT = Paths.get(".").toAbsolutePath();
         class="kw">private Path base = DEFAULT_ROOT;
         class="kw">private FileIOSystem.PathArray roots = new FileIOSystem.PathArray(DEFAULT_ROOT);

         class="kw">private DefaultIOFileSystem() {
         }

         class="kw">public class="kw">synchronized void setBase(Path var1) {
            this.base = var1;
            this.roots = new FileIOSystem.PathArray(var1);
         }

         @Nonnull
         @Override
         class="kw">public class="kw">synchronized Path baseRoot() {
            class="kw">return this.base;
         }

         @Nonnull
         @Override
         class="kw">public class="kw">synchronized FileIOSystem.PathArray roots() {
            class="kw">return this.roots;
         }
      }
   }
}