Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
f674eaf
feat: implementação do mkdir e touch
GabrielRMA1 Jun 14, 2025
12efbd1
Merge pull request #1 from GabrielRMA1/mkdir-e-touch
GabrielRMA1 Jun 15, 2025
7934626
feat: -ls pronto
GabrielRMA1 Jun 15, 2025
17f62f7
feat: atualização do codigo
GabrielRMA1 Jun 15, 2025
f179d86
Merge pull request #3 from GabrielRMA1/ls-e-write
GabrielRMA1 Jun 15, 2025
adf1e9b
feat: implement cp method for file and directory copying
luizarochal Jun 16, 2025
3a4c820
feat: add mv method implementation and corresponding tests
luizarochal Jun 16, 2025
1145a73
feat: add unit tests for cp method in CpTest class
luizarochal Jun 16, 2025
f8f0ca6
feat: implement write method in FileSystemImpl with path validation a…
luizarochal Jun 16, 2025
3797b39
Feat: read implementado
GabrielRMA1 Jun 17, 2025
1f24e76
.vscode
GabrielRMA1 Jun 17, 2025
97e4249
Merge pull request #4 from GabrielRMA1/addUser-e-read
GabrielRMA1 Jun 17, 2025
b07115b
gitignore
GabrielRMA1 Jun 17, 2025
b4e71c6
Revert "Add read"
GabrielRMA1 Jun 17, 2025
0f9d435
Merge pull request #5 from GabrielRMA1/revert-4-addUser-e-read
GabrielRMA1 Jun 17, 2025
158c39f
✨ implement chmod and rm methods with permission checks (#6)
Henrique-volponi Jun 17, 2025
30500ef
arrumando read
GabrielRMA1 Jun 17, 2025
b8e2195
atualizando assinaturas
GabrielRMA1 Jun 17, 2025
4b0e9db
feat: addUser
GabrielRMA1 Jun 18, 2025
9bc009e
Merge pull request #7 from GabrielRMA1/addUser
GabrielRMA1 Jun 18, 2025
232e0df
Merge branch 'main' into feature/write
luizarochal Jun 18, 2025
1782f3f
Merge pull request #8 from GabrielRMA1/feature/write
luizarochal Jun 18, 2025
9b334fa
Merge branch 'main' into feature/mv
luizarochal Jun 18, 2025
8f1a653
Merge pull request #9 from GabrielRMA1/feature/mv
luizarochal Jun 18, 2025
ff2af2f
Merge pull request #10 from GabrielRMA1/feature/cp
luizarochal Jun 18, 2025
6a73e49
Remove unused getMetaDados method and refactor write method in FileSy…
GabrielRMA1 Jun 18, 2025
c47342b
resolvendo uns add e romove
GabrielRMA1 Jun 19, 2025
a26abe8
Refactor FileSystem and FileSystemImpl methods for improved readabili…
Henrique-volponi Jun 19, 2025
7e9934b
Add Offset parameter to write method and implement toString in MetaDa…
GabrielRMA1 Jun 19, 2025
3fb8a51
Add unit tests for Ls, Mkdir, Read, and Touch functionalities in File…
GabrielRMA1 Jun 19, 2025
2996078
✨ Add permission checks for file and directory deletion in rm method
Henrique-volponi Jun 20, 2025
99696dc
♻️ Refactor mkdir method to improve directory creation logic and perm…
Henrique-volponi Jun 20, 2025
2a95d3c
📝 Enhance documentation for FileSystemImpl methods, adding parameter…
Henrique-volponi Jun 20, 2025
5a947e6
📝 Enhance documentation across multiple classes, adding detailed desc…
Henrique-volponi Jun 20, 2025
97ebc97
✨ Add methods for byte manipulation and block management in Arquivo a…
GabrielRMA1 Jun 20, 2025
3467130
update: ultima lapidagem dos testes e da verificação de permissão
GabrielRMA1 Jun 20, 2025
6965e51
refactor: testes faltantes
GabrielRMA1 Jun 21, 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
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -29,4 +29,4 @@
.Spotlight-V100
.Trashes
ehthumbs.db
Thumbs.db
Thumbs.db
30 changes: 20 additions & 10 deletions Main.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
import filesys.IFileSystem;
import filesys.Offset;
import filesys.Usuario;

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

Expand All @@ -20,6 +24,9 @@ public class Main {
private static final String ROOT_DIR = "/";
private static final int READ_BUFFER_SIZE = 256;

//lista de usuários do sistema
private static List<Usuario> usuários = new ArrayList<>();

// Sistema de arquivos
private static IFileSystem fileSystem;

Expand Down Expand Up @@ -68,7 +75,8 @@ public static void main(String[] args) {
*/
System.out.println(userListed + " " + dir + " " + dirPermission); // Somente imprime o usuário, diretório e permissão


// Adiciona o usuário à lista de usuários
usuários.add(new Usuario(userListed, dir, dirPermission));
} else {
System.out.println("Formato ruim no arquivo de usuários. Linha: " + line);
}
Expand All @@ -84,15 +92,16 @@ public static void main(String[] args) {
// 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(usuários);

// // 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());
// }
/*
try {
fileSystem.mkdir(ROOT_DIR, ROOT_USER);
} catch (CaminhoJaExistenteException | PermissaoException e) {
System.out.println(e.getMessage());
}*/

// Menu interativo.
menu();
Expand Down Expand Up @@ -175,7 +184,7 @@ public static void chmod() throws CaminhoNaoEncontradoException, PermissaoExcept
fileSystem.chmod(caminho, user, usuarioAlvo, permissoes);
}

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

Expand All @@ -191,7 +200,7 @@ public static void rm() throws CaminhoNaoEncontradoException, PermissaoException
fileSystem.rm(caminho, user, recursivo);
}

public static void touch() throws CaminhoJaExistenteException, PermissaoException {
public static void touch() throws CaminhoJaExistenteException, PermissaoException, CaminhoNaoEncontradoException {
System.out.println("Insira o caminho do arquivo a ser criado:");
String caminho = scanner.nextLine();

Expand All @@ -206,8 +215,9 @@ public static void write() throws CaminhoNaoEncontradoException, PermissaoExcept
System.out.println("Insira o conteúdo a ser escrito:");
String content = scanner.nextLine();
byte[] buffer = content.getBytes();
Offset offset = new Offset(0);

fileSystem.write(caminho, user, anexar, buffer);
fileSystem.write(caminho, user, anexar, offset, buffer);
}

public static void read() throws CaminhoNaoEncontradoException, PermissaoException {
Expand Down
110 changes: 110 additions & 0 deletions filesys/Arquivo.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
package filesys;

import java.util.ArrayList;
import java.util.List;

/**
* Representa um arquivo no sistema de arquivos virtual.
* Armazena metadados, conteúdo e pode futuramente utilizar blocos para escrita.
*
* <p>
* O conteúdo do arquivo é armazenado como uma lista de bytes.
* </p>
*
* @author SeuNome
*/
class Arquivo {
/** Metadados do arquivo (nome, dono, permissões, etc). */
private MetaDados metaDados;
/** Blocos de dados do arquivo (não utilizado atualmente). */
private Bloco[] bloco; // pode ser usado depois em write()
/** Conteúdo do arquivo em bytes. */
private List<Byte> conteudo = new ArrayList<>();

/**
* Cria um novo arquivo com nome e dono especificados.
* Permissão padrão: "rwx" para o dono.
*
* @param nome Nome do arquivo
* @param dono Usuário dono do arquivo
*/
public Arquivo(String nome, String dono) {
this.metaDados = new MetaDados(nome, dono, "rwx");
this.conteudo = new ArrayList<>();
}

/**
* Retorna os metadados do arquivo.
*
* @return Metadados
*/
public MetaDados getMetaDados() {
return metaDados;
}

/**
* Retorna o conteúdo do arquivo como lista de bytes.
*
* @return Conteúdo do arquivo
*/
public List<Byte> getConteudo() {
return conteudo;
}

/**
* Limpa todo o conteúdo do arquivo.
*/
public void limparConteudo() {
conteudo.clear();
}

/**
* Adiciona um byte ao conteúdo do arquivo.
*
* @param b Byte a ser adicionado
*/
public void adicionarByte(byte b) {
conteudo.add(b);
}

/**
* Adiciona uma lista de bytes ao conteúdo do arquivo.
*
* @param bytes Lista de bytes a serem adicionados
*/
public void adicionarBytes(List<Byte> bytes) {
conteudo.addAll(bytes);
}

/**
* Retorna o tamanho do conteúdo do arquivo.
*
* @return Tamanho do conteúdo em bytes
*/

public int tamanho() {
return conteudo.size();
}

/**
* Retorna os blocos de dados do arquivo.
* Atualmente não utilizado, mas pode ser implementado para escrita em blocos.
*
* @return Array de blocos
*/
public Bloco[] getBloco() {
return bloco;
}

/**
* Define os blocos de dados do arquivo.
* Atualmente não utilizado, mas pode ser implementado para escrita em blocos.
*
* @param bloco Array de blocos a serem definidos
*/
public void setBloco(Bloco[] bloco) {
this.bloco = bloco;
}


}
43 changes: 43 additions & 0 deletions filesys/Bloco.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
package filesys;

/**
* Representa um bloco de dados no sistema de arquivos virtual.
* Pode ser utilizado para armazenar partes do conteúdo de arquivos grandes.
*
* <p>
* Blocos podem ser usados para implementar escrita/leitura em chunks.
* </p>
*
* @author SeuNome
*/
public class Bloco {
/** Dados armazenados neste bloco. */
private Byte[] dados;

/**
* Construtor para criar um bloco vazio.
*/
public Bloco() {
this.dados = new Byte[1024]; // Tamanho padrão de 1KB
}

/**
* Construtor para criar um bloco com dados específicos.
*
* @param dados Dados a serem armazenados no bloco.
*/

public Bloco(Byte[] dados) {
this.dados = dados;
}

/**
* Obtém os dados armazenados neste bloco.
*
* @return Dados do bloco.
*/
public Byte[] getDados() {
return dados;
}

}
34 changes: 34 additions & 0 deletions filesys/Diretorio.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package filesys;

import java.util.HashMap;
import java.util.Map;

/**
* Representa um diretório no sistema de arquivos virtual.
* Cada diretório possui metadados, subdiretórios e arquivos.
*
* <p>
* Permite a criação de hierarquias de diretórios e armazenamento de arquivos.
* </p>
*
* @author SeuNome
*/
public class Diretorio {
/** Metadados do diretório (nome, dono, permissões, etc). */
MetaDados metaDados;
/** Subdiretórios deste diretório. */
Map<String, Diretorio> subdirs = new HashMap<>();
/** Arquivos contidos neste diretório. */
Map<String, Arquivo> arquivos = new HashMap<>();

/**
* Cria um novo diretório com nome e dono especificados.
* Permissão padrão: "rwx" para o dono.
*
* @param nome Nome do diretório
* @param dono Usuário dono do diretório
*/
public Diretorio(String nome, String dono) {
this.metaDados = new MetaDados(nome, dono, "rwx");
}
}
Loading