parent
dddd9b7dbb
commit
7c8c185456
@ -0,0 +1,9 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<module type="JAVA_MODULE" version="4">
|
||||||
|
<component name="NewModuleRootManager" inherit-compiler-output="true">
|
||||||
|
<exclude-output />
|
||||||
|
<content url="file://$MODULE_DIR$" />
|
||||||
|
<orderEntry type="inheritedJdk" />
|
||||||
|
<orderEntry type="sourceFolder" forTests="false" />
|
||||||
|
</component>
|
||||||
|
</module>
|
@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="ProjectRootManager">
|
||||||
|
<output url="file://$PROJECT_DIR$/out" />
|
||||||
|
</component>
|
||||||
|
</project>
|
@ -0,0 +1,8 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="ProjectModuleManager">
|
||||||
|
<modules>
|
||||||
|
<module fileurl="file://$PROJECT_DIR$/.idea/4_tp.iml" filepath="$PROJECT_DIR$/.idea/4_tp.iml" />
|
||||||
|
</modules>
|
||||||
|
</component>
|
||||||
|
</project>
|
@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="VcsDirectoryMappings">
|
||||||
|
<mapping directory="$PROJECT_DIR$/../../../.." vcs="Git" />
|
||||||
|
</component>
|
||||||
|
</project>
|
@ -0,0 +1,38 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="ChangeListManager">
|
||||||
|
<list default="true" id="6d103aab-c6b6-44d6-9e25-6438d52345ba" name="Changes" comment="">
|
||||||
|
<change beforePath="$PROJECT_DIR$/../../../systeme/tp/1_tp/ex1" beforeDir="false" />
|
||||||
|
</list>
|
||||||
|
<option name="SHOW_DIALOG" value="false" />
|
||||||
|
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
||||||
|
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
|
||||||
|
<option name="LAST_RESOLUTION" value="IGNORE" />
|
||||||
|
</component>
|
||||||
|
<component name="Git.Settings">
|
||||||
|
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$/../../../.." />
|
||||||
|
</component>
|
||||||
|
<component name="ProjectId" id="2YFWr1yEOc0C0HYXfTNNLt068jA" />
|
||||||
|
<component name="ProjectLevelVcsManager" settingsEditedManually="true" />
|
||||||
|
<component name="ProjectViewState">
|
||||||
|
<option name="hideEmptyMiddlePackages" value="true" />
|
||||||
|
<option name="showLibraryContents" value="true" />
|
||||||
|
</component>
|
||||||
|
<component name="PropertiesComponent"><![CDATA[{
|
||||||
|
"keyToString": {
|
||||||
|
"RunOnceActivity.OpenProjectViewOnStart": "true",
|
||||||
|
"RunOnceActivity.ShowReadmeOnStart": "true"
|
||||||
|
}
|
||||||
|
}]]></component>
|
||||||
|
<component name="SpellCheckerSettings" RuntimeDictionaries="0" Folders="0" CustomDictionaries="0" DefaultDictionary="application-level" UseSingleDictionary="true" transferred="true" />
|
||||||
|
<component name="TaskManager">
|
||||||
|
<task active="true" id="Default" summary="Default task">
|
||||||
|
<changelist id="6d103aab-c6b6-44d6-9e25-6438d52345ba" name="Changes" comment="" />
|
||||||
|
<created>1700122003637</created>
|
||||||
|
<option name="number" value="Default" />
|
||||||
|
<option name="presentableId" value="Default" />
|
||||||
|
<updated>1700122003637</updated>
|
||||||
|
</task>
|
||||||
|
<servers />
|
||||||
|
</component>
|
||||||
|
</project>
|
@ -0,0 +1,38 @@
|
|||||||
|
Un petit système de fichiers et ses petites commandes
|
||||||
|
Le but du TP est de simuler un petit système de fichiers avec des répertoires et des fichiers textes sur lesquels on pourra appliquer des commandes (ls -R, dump, du, …).
|
||||||
|
|
||||||
|
Fonctionnalités
|
||||||
|
Tous les fichiers devront avoir un nom, une date de création (une vraie date hein !), ainsi que des droits (leur version en octal : 644, 750, etc.) qu'on ne pourra pas modifier une fois créés. Si non spécifiés, les droits par défaut seront 755 pour les dossiers et 644 pour n'importe quel autre fichier. On devra aussi pouvoir récupérer leur taille;
|
||||||
|
Un fichier texte aura comme contenu initial celui passé en argument à sa construction. On devra aussi pouvoir rajouter du texte à ce dernier et récupérer l'ensemble du texte qu'il contient. Sa taille sera la longueur de son contenu textuel;
|
||||||
|
La conversion d'un fichier texte en chaîne de caractères respectera le format :
|
||||||
|
"TextFile nom_du_fichier (droits) created on date_de_creation"
|
||||||
|
Un répertoire pourra contenir plusieurs fichiers (au sens large) qui seront triés et uniques;
|
||||||
|
La taille d'un répertoire sera le nombre de fichiers qu'il contient augmenté de 1;
|
||||||
|
Deux fichiers sont identiques s'ils ont le même nom. Ils sont ordonnés par ordre alphabétique en fonction de leur nom;
|
||||||
|
On pourra ajouter un fichier à un répertoire. Si le fichier est déjà présent, il faudra lever une IllegalArgumentException avec pour message : "This directory already contains the file nom_du_fichier";
|
||||||
|
On devra pouvoir récupérer le contenu du répertoire sous forme d'une collection non modifiable;
|
||||||
|
La conversion d'un répertoire en chaîne de caractères respectera le format :
|
||||||
|
"Directory nom_du_fichier (droits) created on date_de_creation"
|
||||||
|
Une classe (LsR) implémentera le listing récursif d'un fichier : pour un fichier texte ça affichera simplement le fichier sur la sortie standard. Pour un dossier, on affichera une ligne du style "Directory [nom_du_dossier] content :" suivi du listing de ses fichiers. On terminera le listing d'un dossier par une ligne "-----".
|
||||||
|
Les plus téméraires pourront tenter d'indenter le listing comme sur l'exemple, mais ne le faites que si vous avez fini le reste
|
||||||
|
Une classe (Dump) permettra d'enregistrer par sérialisation le contenu d'un fichier dans un vrai fichier (un de votre OS). Si une exception se produit, le texte "Le fichier n'a pas pu être écrit." sera écrit sur la sortie d'erreur, et le programme continuera comme si de rien n'était.
|
||||||
|
Un Dump pourra être créé en spécifiant le chemin d'accès du fichier (celui de votre OS) dans lequel est effectuée la sauvegarde. Si ce chemin n'est pas spécifié, on utilisera le nom du fichier par défaut défini dans la classe qu'on placera dans le HOME de l'utilisateur (vous pouvez obtenir ce dernier grâce à l'appel System.getProperty("user.home"));
|
||||||
|
On devra pouvoir ajouter d'autre commandes dans le futur (par exemple du qui affichera la taille totale de n'importe quel fichier) : pensez-y au moment de la conception !
|
||||||
|
On devra pouvoir simuler des «petits scripts», c'est-à-dire créer des listes de commandes qu'on appliquera à un fichier.
|
||||||
|
Exemple de résultat attendu
|
||||||
|
Voici l'affichage par LsR d'un TextFile simple, suivi de l'affichage d'un Directory qui contient à la fois deux TextFile et un Directory qui lui-même contient 4 TextFile. On finit en enregistant la hiérarchie avec un Dump.
|
||||||
|
|
||||||
|
TextFile Matrix.txt (644) created on 2018-03-16
|
||||||
|
|
||||||
|
Directory [home] content :
|
||||||
|
TextFile H2G2 le guide du voyageur galactique.txt (644) created on 2018-03-16
|
||||||
|
Directory [bpoo] content :
|
||||||
|
TextFile TP1.java (644) created on 2018-03-16
|
||||||
|
TextFile TPVoitures.java (644) created on 2018-03-16
|
||||||
|
TextFile notes.txt (644) created on 2018-03-16
|
||||||
|
TextFile énoncé.txt (644) created on 2018-03-16
|
||||||
|
-----
|
||||||
|
TextFile news.txt (644) created on 2018-03-16
|
||||||
|
-----
|
||||||
|
|
||||||
|
Enregistrement dans le fichier /home/provot/hierarchy_dump
|
@ -0,0 +1,3 @@
|
|||||||
|
# Default ignored files
|
||||||
|
/shelf/
|
||||||
|
/workspace.xml
|
@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="ProjectRootManager" version="2" languageLevel="JDK_17" project-jdk-name="18" project-jdk-type="JavaSDK">
|
||||||
|
<output url="file://$PROJECT_DIR$/out" />
|
||||||
|
</component>
|
||||||
|
</project>
|
@ -0,0 +1,8 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="ProjectModuleManager">
|
||||||
|
<modules>
|
||||||
|
<module fileurl="file://$PROJECT_DIR$/TP4.iml" filepath="$PROJECT_DIR$/TP4.iml" />
|
||||||
|
</modules>
|
||||||
|
</component>
|
||||||
|
</project>
|
@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="VcsDirectoryMappings">
|
||||||
|
<mapping directory="$PROJECT_DIR$/../../../../../.." vcs="Git" />
|
||||||
|
</component>
|
||||||
|
</project>
|
@ -0,0 +1,11 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<module type="JAVA_MODULE" version="4">
|
||||||
|
<component name="NewModuleRootManager" inherit-compiler-output="true">
|
||||||
|
<exclude-output />
|
||||||
|
<content url="file://$MODULE_DIR$">
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
|
||||||
|
</content>
|
||||||
|
<orderEntry type="inheritedJdk" />
|
||||||
|
<orderEntry type="sourceFolder" forTests="false" />
|
||||||
|
</component>
|
||||||
|
</module>
|
@ -0,0 +1,4 @@
|
|||||||
|
package main;
|
||||||
|
|
||||||
|
public class Main {
|
||||||
|
}
|
@ -0,0 +1,49 @@
|
|||||||
|
package models;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
public abstract class Fichier {
|
||||||
|
private String nom;
|
||||||
|
private final Date dateCreation;
|
||||||
|
private int droit;
|
||||||
|
private int taille;
|
||||||
|
|
||||||
|
public Fichier(String nom, Date dateCreation, int droit, int taille){
|
||||||
|
this.nom = nom;
|
||||||
|
this.dateCreation = dateCreation;
|
||||||
|
this.droit = droit;
|
||||||
|
this.taille = taille;
|
||||||
|
}
|
||||||
|
private String getNom() {
|
||||||
|
return this.nom;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Date getDateCreation() {
|
||||||
|
return dateCreation;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getDroit() {
|
||||||
|
return droit;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getTaille() {
|
||||||
|
return taille;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setNom(String nom) {
|
||||||
|
this.nom = nom;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDroit(int droit) {
|
||||||
|
this.droit = droit;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTaille(int taille) {
|
||||||
|
this.taille = taille;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected String equals() {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,21 @@
|
|||||||
|
package models;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
public class FichierTexte extends Fichier {
|
||||||
|
|
||||||
|
private StringBuilder monContenu;
|
||||||
|
|
||||||
|
public FichierTexte(String nom, Date dateCreation, int droit, int taille) {
|
||||||
|
super(nom, dateCreation, droit, taille);
|
||||||
|
}
|
||||||
|
|
||||||
|
private StringBuilder getContenu(){
|
||||||
|
return this.monContenu;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "monContenu : ' " + monContenu + "'";
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,27 @@
|
|||||||
|
package models;
|
||||||
|
|
||||||
|
import java.lang.reflect.Array;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class Repertoire extends Fichier {
|
||||||
|
|
||||||
|
List<Fichier> monRepertoire = new ArrayList<>();
|
||||||
|
|
||||||
|
public Repertoire(String nom, Date dateCreation, int droit, int taille) {
|
||||||
|
super(nom, dateCreation, droit, taille);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void ajouterFichier(Fichier monFichier) {
|
||||||
|
monRepertoire.add(monFichier);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void supprimerFichier(Fichier monFichier) {
|
||||||
|
monRepertoire.remove(monFichier);
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<Fichier> getFichier(){
|
||||||
|
return this.monRepertoire;
|
||||||
|
}
|
||||||
|
}
|
Binary file not shown.
Loading…
Reference in new issue