Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file added Main.class
Binary file not shown.
422 changes: 173 additions & 249 deletions Main.java

Large diffs are not rendered by default.

84 changes: 42 additions & 42 deletions Makefile
Original file line number Diff line number Diff line change
@@ -1,42 +1,42 @@
# Variables
JAVAC = javac
JAVA = java
SRC_DIR = .
BIN_DIR = bin
SRCS = $(shell find $(SRC_DIR) -name "*.java" -not -path "*/test/*" -not -path "*/tests/*")
CLASSES = $(SRCS:%.java=$(BIN_DIR)/%.class)
MAIN_CLASS = Main

# Default target
all: compile

# Create bin directory if it doesn't exist
$(BIN_DIR):
mkdir -p $(BIN_DIR)

# Compile all Java files (excluding tests)
compile: $(BIN_DIR) $(CLASSES)

# Pattern rule to compile Java files
$(BIN_DIR)/%.class: %.java
@mkdir -p $(dir $@)
$(JAVAC) -d $(BIN_DIR) $<

# Clean compiled files
clean:
rm -rf $(BIN_DIR)

# Run the application with a username
run: compile
$(JAVA) -cp $(BIN_DIR) $(MAIN_CLASS) -u $(USERNAME)

# Help target
help:
@echo "Targets disponíveis:"
@echo " all (padrão): Compila o projeto"
@echo " compile: Compila o projeto"
@echo " clean: Remove os arquivos .class compilados"
@echo " run USERNAME=username: Executa a aplicação com o nome de usuário especificado"
@echo " help: Exibe esta mensagem de ajuda"

.PHONY: all compile clean run help
# Variables
JAVAC = javac
JAVA = java
SRC_DIR = .
BIN_DIR = bin
SRCS = $(shell find $(SRC_DIR) -name "*.java" -not -path "*/test/*" -not -path "*/tests/*")
CLASSES = $(SRCS:%.java=$(BIN_DIR)/%.class)
MAIN_CLASS = Main
# Default target
all: compile
# Create bin directory if it doesn't exist
$(BIN_DIR):
mkdir -p $(BIN_DIR)
# Compile all Java files (excluding tests)
compile: $(BIN_DIR) $(CLASSES)
# Pattern rule to compile Java files
$(BIN_DIR)/%.class: %.java
@mkdir -p $(dir $@)
$(JAVAC) -d $(BIN_DIR) $<
# Clean compiled files
clean:
rm -rf $(BIN_DIR)
# Run the application with a username
run: compile
$(JAVA) -cp $(BIN_DIR) $(MAIN_CLASS) -u $(USERNAME)
# Help target
help:
@echo "Targets disponíveis:"
@echo " all (padrão): Compila o projeto"
@echo " compile: Compila o projeto"
@echo " clean: Remove os arquivos .class compilados"
@echo " run USERNAME=username: Executa a aplicação com o nome de usuário especificado"
@echo " help: Exibe esta mensagem de ajuda"
.PHONY: all compile clean run help
31 changes: 31 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
# Sistema de Arquivos Virtual - PUC Minas

Este projeto é a implementação de um sistema de arquivos virtual em Java, desenvolvido como parte do trabalho prático da disciplina **Sistemas Operacionais** na PUC Minas.

## 🛠️ Funcionalidades

- `mkdir`: cria diretórios
- `touch`: cria arquivos vazios
- `ls`: lista conteúdo de diretórios
- `cp`: copia arquivos e pastas
- `mv`: move ou renomeia arquivos/pastas
- `write` / `read`: escrita/leitura com controle de blocos
- `rm`: remove arquivos ou diretórios
- `chmod`: gerencia permissões (r, w, x)

## 🚀 Execução

para rodar o programa, utilize o run and debug e crie um launch.json e nele, adicione

"args": ["root"],
"cwd": "${workspaceFolder}/-->endereço onde o arquivo do projeto está salvo<--

## 👤 Desenvolvedores

- João Paulo Elias Fonseca
- Lucas de Souza Pereira

---

PUC Minas – Engenharia Software
Disciplina: Sistemas Operacionais
Binary file added exception/CaminhoJaExistenteException.class
Binary file not shown.
18 changes: 9 additions & 9 deletions exception/CaminhoJaExistenteException.java
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
package exception;

import java.io.IOException;

public class CaminhoJaExistenteException extends IOException {
public CaminhoJaExistenteException(String message) {
super(message);
}
}
package exception;
import java.io.IOException;
public class CaminhoJaExistenteException extends IOException {
public CaminhoJaExistenteException(String message) {
super(message);
}
}
Binary file added exception/CaminhoNaoEncontradoException.class
Binary file not shown.
14 changes: 7 additions & 7 deletions exception/CaminhoNaoEncontradoException.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package exception;

public class CaminhoNaoEncontradoException extends Exception {
public CaminhoNaoEncontradoException(String message) {
super(message);
}
}
package exception;
public class CaminhoNaoEncontradoException extends Exception {
public CaminhoNaoEncontradoException(String message) {
super(message);
}
}
Binary file added exception/PermissaoException.class
Binary file not shown.
12 changes: 6 additions & 6 deletions exception/PermissaoException.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package exception;

public class PermissaoException extends Exception {
public PermissaoException(String message) {
super(message);
}
package exception;
public class PermissaoException extends Exception {
public PermissaoException(String message) {
super(message);
}
}
Binary file added filesys/Arquivo.class
Binary file not shown.
26 changes: 26 additions & 0 deletions filesys/Arquivo.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package filesys;

import java.util.ArrayList;

public class Arquivo {
private MetaDados metaDados;
private ArrayList<Bloco> blocos;

public Arquivo(String nome, String dono) {
this.metaDados = new MetaDados(nome, dono);
this.blocos = new ArrayList<>();
}

public MetaDados getMetaDados() {
return metaDados;
}

public ArrayList<Bloco> getBlocos() {
return blocos;
}

public void addBloco(Bloco bloco) {
blocos.add(bloco);
metaDados.setTamanho(metaDados.getTamanho() + bloco.getDados().length);
}
}
Binary file added filesys/Bloco.class
Binary file not shown.
17 changes: 17 additions & 0 deletions filesys/Bloco.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package filesys;

public class Bloco {
private Byte[] dados;

public Bloco(int tamanho) {
dados = new Byte[tamanho];
}

public Byte[] getDados() {
return dados;
}

public void setDados(Byte[] dados) {
this.dados = dados;
}
}
Binary file added filesys/Diretorio.class
Binary file not shown.
35 changes: 35 additions & 0 deletions filesys/Diretorio.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package filesys;

import java.util.ArrayList;

public class Diretorio {
private MetaDados metaDados;
private ArrayList<Arquivo> arquivos;
private ArrayList<Diretorio> subDiretorios;

public Diretorio(String nome, String dono) {
this.metaDados = new MetaDados(nome, dono);
this.arquivos = new ArrayList<>();
this.subDiretorios = new ArrayList<>();
}

public MetaDados getMetaDados() {
return metaDados;
}

public ArrayList<Arquivo> getArquivos() {
return arquivos;
}

public ArrayList<Diretorio> getSubDiretorios() {
return subDiretorios;
}

public void adicionarArquivo(Arquivo arquivo) {
arquivos.add(arquivo);
}

public void adicionarSubDiretorio(Diretorio dir) {
subDiretorios.add(dir);
}
}
138 changes: 71 additions & 67 deletions filesys/FileSystem.java
Original file line number Diff line number Diff line change
@@ -1,67 +1,71 @@
package filesys;

import exception.CaminhoJaExistenteException;
import exception.CaminhoNaoEncontradoException;
import exception.PermissaoException;

// Essa classe deve servir apenas como proxy para o FileSystemImpl
final public class FileSystem implements IFileSystem {

private final IFileSystem fileSystemImpl;

public FileSystem() {
fileSystemImpl = new FileSystemImpl();
}

@Override
public void chmod(String caminho, String usuario, String usuarioAlvo, String permissao)
throws CaminhoNaoEncontradoException, PermissaoException {
fileSystemImpl.chmod(caminho, usuario, usuarioAlvo, permissao);
}

@Override
public void mkdir(String caminho, String usuario) throws CaminhoJaExistenteException, PermissaoException {
fileSystemImpl.mkdir(caminho, usuario);
}

@Override
public void rm(String caminho, String usuario, boolean recursivo)
throws CaminhoNaoEncontradoException, PermissaoException {
fileSystemImpl.rm(caminho, usuario, recursivo);
}

@Override
public void touch(String caminho, String usuario) throws CaminhoJaExistenteException, PermissaoException {
fileSystemImpl.touch(caminho, usuario);
}

@Override
public void write(String caminho, String usuario, boolean anexar, byte[] buffer)
throws CaminhoNaoEncontradoException, PermissaoException {
fileSystemImpl.write(caminho, usuario, anexar, buffer);
}

@Override
public void read(String caminho, String usuario, byte[] buffer)
throws CaminhoNaoEncontradoException, PermissaoException {
fileSystemImpl.read(caminho, usuario, buffer);
}

@Override
public void mv(String caminhoAntigo, String caminhoNovo, String usuario)
throws CaminhoNaoEncontradoException, PermissaoException {
fileSystemImpl.mv(caminhoAntigo, caminhoNovo, usuario);
}

@Override
public void ls(String caminho, String usuario, boolean recursivo)
throws CaminhoNaoEncontradoException, PermissaoException {
fileSystemImpl.ls(caminho, usuario, recursivo);
}

@Override
public void cp(String caminhoOrigem, String caminhoDestino, String usuario, boolean recursivo)
throws CaminhoNaoEncontradoException, PermissaoException {
fileSystemImpl.cp(caminhoOrigem, caminhoDestino, usuario, recursivo);
}
}
package filesys;

import exception.CaminhoJaExistenteException;
import exception.CaminhoNaoEncontradoException;
import exception.PermissaoException;

// Essa classe deve servir apenas como proxy para o FileSystemImpl
final public class FileSystem implements IFileSystem {

private final FileSystemImpl fileSystemImpl;

public FileSystem() {
fileSystemImpl = new FileSystemImpl();
}

@Override
public void chmod(String caminho, String usuario, String usuarioAlvo, String permissao)
throws CaminhoNaoEncontradoException, PermissaoException {
fileSystemImpl.chmod(caminho, usuario, usuarioAlvo, permissao);
}

@Override
public void mkdir(String caminho, String usuario) throws CaminhoJaExistenteException, PermissaoException {
fileSystemImpl.mkdir(caminho, usuario);
}

@Override
public void rm(String caminho, String usuario, boolean recursivo)
throws CaminhoNaoEncontradoException, PermissaoException {
fileSystemImpl.rm(caminho, usuario, recursivo);
}

@Override
public void touch(String caminho, String usuario) throws CaminhoJaExistenteException, PermissaoException {
fileSystemImpl.touch(caminho, usuario);
}

@Override
public void write(String caminho, String usuario, boolean anexar, byte[] buffer)
throws CaminhoNaoEncontradoException, PermissaoException {
fileSystemImpl.write(caminho, usuario, anexar, buffer);
}

@Override
public void read(String caminho, String usuario, byte[] buffer)
throws CaminhoNaoEncontradoException, PermissaoException {
fileSystemImpl.read(caminho, usuario, buffer);
}

@Override
public void mv(String caminhoAntigo, String caminhoNovo, String usuario)
throws CaminhoNaoEncontradoException, PermissaoException {
fileSystemImpl.mv(caminhoAntigo, caminhoNovo, usuario);
}

@Override
public void ls(String caminho, String usuario, boolean recursivo)
throws CaminhoNaoEncontradoException, PermissaoException {
fileSystemImpl.ls(caminho, usuario, recursivo);
}

@Override
public void cp(String caminhoOrigem, String caminhoDestino, String usuario, boolean recursivo)
throws CaminhoNaoEncontradoException, PermissaoException {
fileSystemImpl.cp(caminhoOrigem, caminhoDestino, usuario, recursivo);
}

public void addUser(String user) {
fileSystemImpl.addUser(user);
}
}
Binary file added filesys/FileSystemImpl.class
Binary file not shown.
Loading