110 lines
4.7 KiB
Java
110 lines
4.7 KiB
Java
/*
|
|
* This file is part of the public ComputerCraft API - http://www.computercraft.info
|
|
* Copyright Daniel Ratcliffe, 2011-2019. This API may be redistributed unmodified and in full only.
|
|
* For help using the API, and posting your mods, visit the forums at computercraft.info.
|
|
*/
|
|
|
|
package dan200.computercraft.api.filesystem;
|
|
|
|
import dan200.computercraft.api.ComputerCraftAPI;
|
|
import dan200.computercraft.api.peripheral.IComputerAccess;
|
|
import net.minecraft.world.World;
|
|
|
|
import javax.annotation.Nonnull;
|
|
import java.io.IOException;
|
|
import java.io.OutputStream;
|
|
import java.nio.channels.Channels;
|
|
import java.nio.channels.WritableByteChannel;
|
|
|
|
/**
|
|
* Represents a part of a virtual filesystem that can be mounted onto a computer using {@link IComputerAccess#mount(String, IMount)}
|
|
* or {@link IComputerAccess#mountWritable(String, IWritableMount)}, that can also be written to.
|
|
*
|
|
* Ready made implementations of this interface can be created using
|
|
* {@link ComputerCraftAPI#createSaveDirMount(World, String, long)}, or you're free to implement it yourselves!
|
|
*
|
|
* @see ComputerCraftAPI#createSaveDirMount(World, String, long)
|
|
* @see IComputerAccess#mount(String, IMount)
|
|
* @see IComputerAccess#mountWritable(String, IWritableMount)
|
|
* @see IMount
|
|
*/
|
|
public interface IWritableMount extends IMount
|
|
{
|
|
/**
|
|
* Creates a directory at a given path inside the virtual file system.
|
|
*
|
|
* @param path A file path in normalised format, relative to the mount location. ie: "programs/mynewprograms".
|
|
* @throws IOException If the directory already exists or could not be created.
|
|
*/
|
|
void makeDirectory( @Nonnull String path ) throws IOException;
|
|
|
|
/**
|
|
* Deletes a directory at a given path inside the virtual file system.
|
|
*
|
|
* @param path A file path in normalised format, relative to the mount location. ie: "programs/myoldprograms".
|
|
* @throws IOException If the file does not exist or could not be deleted.
|
|
*/
|
|
void delete( @Nonnull String path ) throws IOException;
|
|
|
|
/**
|
|
* Opens a file with a given path, and returns an {@link OutputStream} for writing to it.
|
|
*
|
|
* @param path A file path in normalised format, relative to the mount location. ie: "programs/myprogram".
|
|
* @return A stream for writing to
|
|
* @throws IOException If the file could not be opened for writing.
|
|
* @deprecated Use {@link #openChannelForWrite(String)} instead.
|
|
*/
|
|
@Nonnull
|
|
@Deprecated
|
|
OutputStream openForWrite( @Nonnull String path ) throws IOException;
|
|
|
|
/**
|
|
* Opens a file with a given path, and returns an {@link OutputStream} for writing to it.
|
|
*
|
|
* @param path A file path in normalised format, relative to the mount location. ie: "programs/myprogram".
|
|
* @return A stream for writing to. If the channel implements {@link java.nio.channels.SeekableByteChannel}, one
|
|
* will be able to seek to arbitrary positions when using binary mode.
|
|
* @throws IOException If the file could not be opened for writing.
|
|
*/
|
|
@Nonnull
|
|
default WritableByteChannel openChannelForWrite( @Nonnull String path ) throws IOException
|
|
{
|
|
return Channels.newChannel( openForWrite( path ) );
|
|
}
|
|
|
|
/**
|
|
* Opens a file with a given path, and returns an {@link OutputStream} for appending to it.
|
|
*
|
|
* @param path A file path in normalised format, relative to the mount location. ie: "programs/myprogram".
|
|
* @return A stream for writing to.
|
|
* @throws IOException If the file could not be opened for writing.
|
|
* @deprecated Use {@link #openChannelForAppend(String)} instead.
|
|
*/
|
|
@Nonnull
|
|
@Deprecated
|
|
OutputStream openForAppend( @Nonnull String path ) throws IOException;
|
|
|
|
/**
|
|
* Opens a file with a given path, and returns an {@link OutputStream} for appending to it.
|
|
*
|
|
* @param path A file path in normalised format, relative to the mount location. ie: "programs/myprogram".
|
|
* @return A stream for writing to. If the channel implements {@link java.nio.channels.SeekableByteChannel}, one
|
|
* will be able to seek to arbitrary positions when using binary mode.
|
|
* @throws IOException If the file could not be opened for writing.
|
|
*/
|
|
@Nonnull
|
|
default WritableByteChannel openChannelForAppend( @Nonnull String path ) throws IOException
|
|
{
|
|
return Channels.newChannel( openForAppend( path ) );
|
|
}
|
|
|
|
/**
|
|
* Get the amount of free space on the mount, in bytes. You should decrease this value as the user writes to the
|
|
* mount, and write operations should fail once it reaches zero.
|
|
*
|
|
* @return The amount of free space, in bytes.
|
|
* @throws IOException If the remaining space could not be computed.
|
|
*/
|
|
long getRemainingSpace() throws IOException;
|
|
}
|