Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
c342893
implement FileSystem classes with basic directory and file management
gabialvarenga May 7, 2025
a0a34de
refactor: update Arquivo and Diretorio classes to extend ElementoFS a…
gabialvarenga May 20, 2025
6f40573
feat: add Bloco and Offset classes for block and offset management
gabialvarenga May 20, 2025
0d1ebe2
feat: implement FileSystemImpl with user and permission management
gabialvarenga May 20, 2025
1f27ad2
test: add unit tests for FileSystemImpl methods
gabialvarenga May 20, 2025
e68f338
feat: implement Usuario class with attributes and methods for user ma…
gabialvarenga May 20, 2025
05cc076
feat: add project checklist for POSIX file system implementation
gabialvarenga May 20, 2025
e9ce8f1
Update FileSystemImpl.java
gabialvarenga May 21, 2025
9894e1d
Update CHECKLIST_DO_GRUPO.md
gabialvarenga May 21, 2025
4f625d8
feat: implementar métodos de remoção e escrita no sistema de arquivos…
May 22, 2025
22d9f49
feat: implementar método de leitura de arquivos e adicionar teste cor…
May 22, 2025
5b7b644
feat: implementar métodos mv, ls e cp no sistema de arquivos e adicio…
May 22, 2025
a8a262a
mudanças na implemnetação e criação dos testes de permissão
ArthurAstolfi Jun 3, 2025
f80f499
feat: refactor FileSystem and FileSystemImpl to accept a list of user…
ArthurAstolfi Jun 3, 2025
3df9a6c
feat: adicionar suporte a permissões globais de usuários e métodos co…
Jun 3, 2025
57bf4e7
feat: adicionar método para obter o tamanho de arquivos e ajustar lei…
Jun 3, 2025
13732ff
feat: implementar criação recursiva de diretórios no método mkdir
Jun 3, 2025
74f807a
feat: implementar validação de caminhos relativos e absolutos no méto…
gabialvarenga Jun 3, 2025
b708e68
Merge branch 'carlos' of https://github.com/gabialvarenga/filesys int…
gabialvarenga Jun 3, 2025
5206e64
feat: adicionar verificação para diretórios existentes no método mkdir
Jun 5, 2025
d5d0dd0
refactor: remover checklist do projeto e limpar código não utilizado
Jun 20, 2025
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
79 changes: 49 additions & 30 deletions Main.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
import filesys.IFileSystem;
import model.Usuario;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import java.io.FileNotFoundException;

Expand All @@ -8,6 +11,7 @@
import exception.CaminhoNaoEncontradoException;

import filesys.FileSystem;
import filesys.FileSystemImpl;

// MENU INTERATIVO PARA O SISTEMA DE ARQUIVOS
// SINTA-SE LIVRE PARA ALTERAR A CLASSE MAIN
Expand Down Expand Up @@ -36,10 +40,12 @@ public static void main(String[] args) {
// Para quaisquer operações que serão feitas por esse usuário em um caminho /path/**,
// deve-se checar se o usuário tem permissão de escrita (r) neste caminho.
if (args.length < 2) {
System.out.println("Usuário não fornecido");
System.out.println("Usuario nao fornecido");
return;
}
user = args[1];

List<Usuario> usuarios = new ArrayList<>();

// Carrega a lista de usuários do sistema a partir de arquivo
// Formato do arquivo users:
Expand All @@ -62,38 +68,37 @@ public static void main(String[] args) {
String dir = parts[1];
String dirPermission = parts[2];

/* A FAZER:
/* FEITO:
* Processar a permissão de todos os usuários existentes por diretório.
* Por enquanto esse código somente imprime as permissões contidas no arquivo users.
*/
System.out.println(userListed + " " + dir + " " + dirPermission); // Somente imprime o usuário, diretório e permissão

usuarios.add(new Usuario(userListed, dirPermission, dir));

} else {
System.out.println("Formato ruim no arquivo de usuários. Linha: " + line);
System.out.println("Formato ruim no arquivo de usuarios. Linha: " + line);
}
}
}
userScanner.close();
} catch (FileNotFoundException e) { // Retorna se o arquivo de usuários não for encontrado
System.out.println("Arquivo de usuários não encontrado");
System.out.println("Arquivo de usuarios nao encontrado");

return;
}

// Finalmente cria o Sistema de Arquivos
// Lista de usuários é imutável durante a execução do programa
// Obs: Como passar a lista de usuários para o FileSystem?
fileSystem = new FileSystem(/*usuários?*/);
fileSystem = new FileSystem(usuarios);

// // DESCOMENTE O BLOCO ABAIXO PARA CRIAR O DIRETÓRIO RAIZ ANTES DE RODAR O MENU
// // Cria o diretório raiz do sistema. Root sempre tem permissão total "rwx"
// try {
// fileSystem.mkdir(ROOT_DIR, ROOT_USER);
// } catch (CaminhoJaExistenteException | PermissaoException e) {
// System.out.println(e.getMessage());
// System.out.println(e.getMessage());
// }

// Menu interativo.
menu();
}
Expand All @@ -103,18 +108,18 @@ public static void main(String[] args) {
// mas diretamente na interface IFileSystem
public static void menu() {
while (true) {
System.out.println("\nComandos disponíveis:");
System.out.println("1. chmod - Alterar permissões");
System.out.println("2. mkdir - Criar diretório");
System.out.println("3. rm - Remover arquivo/diretório");
System.out.println("4. touch - Criar arquivo");
System.out.println("5. write - Escrever em arquivo");
System.out.println("6. read - Ler arquivo");
System.out.println("7. mv - Mover/renomear arquivo");
System.out.println("8. ls - Listar diretório");
System.out.println("9. cp - Copiar arquivo");
System.out.println("0. exit - Sair");
System.out.print("\nDigite o comando desejado: ");
System.out.println("\nComandos disponiveis (POSIX):");
System.out.println("1. chmod - Alterar permissoes de arquivo ou diretorio");
System.out.println("2. mkdir - Criar diretorio (cria diretorios intermediarios automaticamente, como 'mkdir -p')");
System.out.println("3. rm - Remover arquivo ou diretorio (pode ser recursivo)");
System.out.println("4. touch - Criar arquivo vazio");
System.out.println("5. write - Escrever dados em arquivo (pode anexar ou sobrescrever)");
System.out.println("6. read - Ler dados de arquivo (leitura sequencial)");
System.out.println("7. mv - Mover ou renomear arquivo/diretorio");
System.out.println("8. ls - Listar conteudo de diretorio (pode ser recursivo)");
System.out.println("9. cp - Copiar arquivo ou diretorio (pode ser recursivo)");
System.out.println("0. exit - Sair do sistema de arquivos");
System.out.print("\nDigite o numero do comando desejado: ");

String opcao = scanner.nextLine();
try {
Expand Down Expand Up @@ -165,25 +170,25 @@ public static void menu() {
}

public static void chmod() throws CaminhoNaoEncontradoException, PermissaoException {
System.out.println("Insira o caminho do arquivo ou diretório:");
System.out.println("Insira o caminho do arquivo ou diretorio:");
String caminho = scanner.nextLine();
System.out.println("Insira o usuário para o qual deseja alterar as permissões:");
System.out.println("Insira o usuario para o qual deseja alterar as permissoes:");
String usuarioAlvo = scanner.nextLine();
System.out.println("Insira a permissão (formato: 3 caracteres\"rwx\"):");
System.out.println("Insira a permissao (formato: 3 caracteres\"rwx\"):");
String permissoes = scanner.nextLine();

fileSystem.chmod(caminho, user, usuarioAlvo, permissoes);
}

public static void mkdir() throws CaminhoJaExistenteException, PermissaoException {
System.out.println("Insira o caminho do diretório a ser criado:");
System.out.println("Insira o caminho do diretorio a ser criado:");
String caminho = scanner.nextLine();

fileSystem.mkdir(caminho, user);
}

public static void rm() throws CaminhoNaoEncontradoException, PermissaoException {
System.out.println("Insira o caminho do diretório a ser removido:");
System.out.println("Insira o caminho do diretorio a ser removido:");
String caminho = scanner.nextLine();
System.out.println("Remover recursivamente? (true/false):");
boolean recursivo = Boolean.parseBoolean(scanner.nextLine());
Expand All @@ -203,7 +208,7 @@ public static void write() throws CaminhoNaoEncontradoException, PermissaoExcept
String caminho = scanner.nextLine();
System.out.println("Anexar? (true/false):");
boolean anexar = Boolean.parseBoolean(scanner.nextLine());
System.out.println("Insira o conteúdo a ser escrito:");
System.out.println("Insira o conteudo a ser escrito:");
String content = scanner.nextLine();
byte[] buffer = content.getBytes();

Expand All @@ -213,9 +218,23 @@ public static void write() throws CaminhoNaoEncontradoException, PermissaoExcept
public static void read() throws CaminhoNaoEncontradoException, PermissaoException {
System.out.println("Insira o caminho do arquivo a ser lido:");
String caminho = scanner.nextLine();
byte[] buffer = new byte[READ_BUFFER_SIZE]; // Exemplo de tamanho de buffer por load/leitura . O que acontece se o Buffer for menor que o conteúdo a ser lido?

fileSystem.read(caminho, user, buffer); // Lógica para ler arquivos maiores que o buffer deve ser implementada.

// Descobre o tamanho real do arquivo usando o método auxiliar
int tamanho;
try {
// Acesso ao método auxiliar via cast para FileSystemImpl
FileSystem fsProxy = (FileSystem) fileSystem;
FileSystemImpl fsImpl = (FileSystemImpl) fsProxy.fileSystemImpl;
tamanho = fsImpl.getTamanhoArquivo(caminho);
} catch (Exception e) {
System.out.println("Erro ao obter tamanho do arquivo: " + e.getMessage());
return;
}

byte[] buffer = new byte[tamanho];
fileSystem.read(caminho, user, buffer);
System.out.println("Conteudo do arquivo:");
System.out.println(new String(buffer));
}

public static void mv() throws CaminhoNaoEncontradoException, PermissaoException {
Expand All @@ -228,7 +247,7 @@ public static void mv() throws CaminhoNaoEncontradoException, PermissaoException
}

public static void ls() throws CaminhoNaoEncontradoException, PermissaoException {
System.out.println("Insira o caminho do diretório a ser listado:");
System.out.println("Insira o caminho do diretorio a ser listado:");
String caminho = scanner.nextLine();
System.out.println("Listar recursivamente? (true/false):");
boolean recursivo = Boolean.parseBoolean(scanner.nextLine());
Expand Down
10 changes: 7 additions & 3 deletions filesys/FileSystem.java
Original file line number Diff line number Diff line change
@@ -1,16 +1,20 @@
package filesys;

import java.util.List;

import exception.CaminhoJaExistenteException;
import exception.CaminhoNaoEncontradoException;
import exception.PermissaoException;
import model.Usuario;

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

private final IFileSystem fileSystemImpl;
public final IFileSystem fileSystemImpl;

public FileSystem(List<Usuario> usuarios) {
fileSystemImpl = new FileSystemImpl(usuarios);

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

@Override
Expand Down
Loading