DefaultIOFileSystem class

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

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

implements: FileIOSystem

Поля (3)

МодификаторыТипИмя
private static final Path DEFAULT_ROOT
private Path base
private FileIOSystem.PathArray roots

Методы (3)

МодификаторыВозвратСигнатура
public synchronized Path baseRootpublic synchronized Path baseRoot()
public synchronized FileIOSystem.PathArray rootspublic synchronized FileIOSystem.PathArray roots()
public synchronized void setBasepublic synchronized void setBase(Path var1)

Исходный код

Показать/скрыть
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;
         }
      }
   }
}