Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.util.LinkedList;
- import java.util.List;
- import java.util.Scanner;
- public class layer4 {
- public static class UCB {
- String Nazwa;
- int RozmiarPliku; //liczony w bajtach
- //Indeksy blokow
- private int PierwszyBlok;
- private int OstatniBlok;
- UCB(String nazwa, int rozmiarpliku, int pierwszyblok, int ostatniblok){
- Nazwa=nazwa;
- RozmiarPliku=rozmiarpliku;
- PierwszyBlok=pierwszyblok;
- OstatniBlok=ostatniblok;
- }
- };
- public static class DyskTwardy {
- private int WielkoscBloku = 32;
- private int LiczbaBlokow = 32;
- byte[] Dysk;
- int FAT[]; //ostatni blok wskazuje na siebie, -1- blok wolny
- List <UCB> Katalog =new LinkedList <UCB>();
- int SzukajWolnego(){
- for(int i=0;i<LiczbaBlokow;i++)
- if (FAT[i]==-1) return i;
- return -1;
- }
- int SzukajKolejnego(int blok){
- return FAT[blok];
- }
- DyskTwardy(){
- Dysk=new byte[WielkoscBloku*LiczbaBlokow];
- FAT=new int[LiczbaBlokow];
- UtworzFAT();
- Katalog =new LinkedList <UCB>();
- }
- void UtworzFAT(){
- for (int i=0; i<LiczbaBlokow; i++)
- FAT[i]=-1;
- }
- void WyswietlFAT(){
- System.out.println("Tablica FAT: ");
- for (int i=0;i<LiczbaBlokow;i++){
- System.out.println (i + ".\t" + FAT[i]);
- }
- }
- void WyswietlKatalog(){
- System.out.println("Katalog: ");
- System.out.println("/...");
- for (int i=0; i<Katalog.size();i++)
- System.out.println(" -" +Katalog.get(i).Nazwa+"\n");
- System.out.println("\n");
- }
- void WyswietlDysk(){
- System.out.println("Zawartość Dysku: ");
- for (int j=0; j<LiczbaBlokow; j++){
- System.out.print (j+".\t");
- for(int i=WielkoscBloku*j;i<j*WielkoscBloku+WielkoscBloku;i++)
- System.out.print (Dysk[i]+"\t");
- System.out.print ("\n");
- }
- }
- void Stan(){
- WyswietlDysk();
- WyswietlFAT();
- WyswietlKatalog();
- }
- String SprawdzNazwe(String nazwa){
- int n=0; String temp=nazwa;
- for (int i=0; i<Katalog.size();i++){
- if(Katalog.get(i).Nazwa.contains(nazwa)){
- //nazwa=nazwa+'*';
- n++;
- nazwa=temp+'['+n+']';
- i=-1;
- }
- }
- if (n!=0){
- nazwa=temp+'['+n+']';
- System.out.println("Nadana nazwa już w użyciu. Zmieniono na: "+nazwa);
- }
- return nazwa;
- }
- public void Utworz(String nazwa, String zawartosc){
- //System.out.println("Stan przed dodaniem pliku "+nazwa+": ");
- //Stan();
- byte[] a=zawartosc.getBytes();
- if (SzukajWolnego()>-1 && zawartosc.length()<=(WielkoscBloku*LiczbaBlokow)){
- int wolny[]=new int [(a.length/WielkoscBloku)+1]; //tablica indeksow wolnych blokow
- System.out.println("Rozmiar pliku: "+zawartosc.length()+" B");
- System.out.println("Ilość potrzebnych bloków dysku: "+((a.length/WielkoscBloku)+1));
- System.out.print("Numery zajmowanych bloków dysku: ");
- for (int i=0;i<(a.length/WielkoscBloku)+1;i++){
- System.out.print(SzukajWolnego()+"\t");
- wolny[i]=SzukajWolnego();
- FAT[wolny[i]]=wolny[i];
- if(i!=0) FAT[wolny[i-1]]=wolny[i];
- }
- System.out.println("\n");
- FAT[wolny[(a.length/WielkoscBloku)]]=wolny[(a.length/WielkoscBloku)];
- int n=0;
- for (int j=0;j<wolny.length;j++){
- for (int i=(wolny[j]*WielkoscBloku); i<(wolny[j]*WielkoscBloku)+WielkoscBloku; i++){
- while (n<a.length&&i<(wolny[j]*WielkoscBloku)+WielkoscBloku){
- Dysk[i]=a[n];
- n++; i++;
- }
- }
- }
- UCB plik=new UCB(nazwa, a.length, wolny[0], wolny[(a.length/WielkoscBloku)]);
- Katalog.add(plik);
- System.out.println(nazwa+"- Plik zostal dodany\n");
- //Stan();
- }
- else System.out.println("Brak miejsca na dysku");
- }
- public void Otworz(String nazwa){
- System.out.println("Otwieranie pliku "+nazwa+ "...");
- int x=-1;
- //System.out.println("Size:" + a);
- for (int i=0; i<Katalog.size();i++){
- if (Katalog.get(i).Nazwa.equals(nazwa))
- x=i;
- }
- if (x!=-1){
- byte zawartosc[]=new byte[Katalog.get(x).RozmiarPliku];
- int[] zajety=new int[((Katalog.get(x).RozmiarPliku)/WielkoscBloku+1)];
- zajety[0]=Katalog.get(x).PierwszyBlok;
- System.out.print("Bloki zajmowane przez plik: " + zajety[0] + " ");
- if (Katalog.get(x).RozmiarPliku>WielkoscBloku){
- int temp=SzukajKolejnego(Katalog.get(x).PierwszyBlok);
- int i=1;
- do{
- zajety[i]=temp;
- temp=SzukajKolejnego(SzukajKolejnego(temp));
- System.out.print(zajety[i]+" ");
- }
- while(SzukajKolejnego(temp)!=Katalog.get(x).OstatniBlok);
- }
- System.out.print("\n");
- int n=0;
- for (int j=0;j<zajety.length;j++){
- for (int i=(zajety[j]*WielkoscBloku);i<(zajety[j]*WielkoscBloku)+WielkoscBloku;i++){
- while (n<zawartosc.length&&i<(zajety[j]*WielkoscBloku)+WielkoscBloku){
- zawartosc[n]=Dysk[i];
- n++; i++;
- }
- }
- }
- System.out.println("Otwarto plik "+nazwa+"\nZawartość pliku: ");
- String wyjscie = new String (zawartosc);
- System.out.println(wyjscie);
- }
- else System.out.println("Nie znaleziono pliku.");
- }
- public void Usun(String nazwa){
- //System.out.println("Stan przed dodaniem pliku "+nazwa+": ");
- //Stan();
- int x=-1;
- for (int i=0; i<Katalog.size();i++){
- if (Katalog.get(i).Nazwa.equals(nazwa))
- x=i;
- }
- if (x!=-1){
- //byte zawartosc[]=new byte[Katalog.get(x).RozmiarPliku];
- int[] zajety=new int[((Katalog.get(x).RozmiarPliku)/WielkoscBloku)+1];
- zajety[0]=Katalog.get(x).PierwszyBlok;
- if (Katalog.get(x).RozmiarPliku>WielkoscBloku){
- int temp=SzukajKolejnego(Katalog.get(x).PierwszyBlok);
- int i=1;
- do{
- zajety[i]=temp;
- temp=SzukajKolejnego(SzukajKolejnego(temp));
- System.out.println(zajety[i]);
- i++;
- }
- while(SzukajKolejnego(temp)!=Katalog.get(x).OstatniBlok);
- }
- zajety[zajety.length-1]=Katalog.get(x).OstatniBlok;
- int n=0;
- for (int j=0;j<zajety.length;j++){
- FAT[zajety[j]]=-1;
- for (int i=(zajety[j]*WielkoscBloku);i<(zajety[j]*WielkoscBloku)+WielkoscBloku;i++){
- while (n<Katalog.get(x).RozmiarPliku&&i<(zajety[j]*WielkoscBloku)+WielkoscBloku){
- Dysk[i]=0;
- //System.out.println(zawartosc[n]);
- n++; i++;
- }
- }
- }
- Katalog.remove(x);
- System.out.println("Usunięto plik "+nazwa);
- //Stan();
- }
- else System.out.println("Nie znaleziono pliku");
- }
- void Pisz(){
- System.out.println("Tworzenie pliku");
- Scanner input = new Scanner(System.in);
- System.out.println("Wprowadź nazwę pliku");
- String nazwa = input.nextLine();
- nazwa=SprawdzNazwe(nazwa);
- System.out.println("Wprowadź zawartość pliku");
- String zawartosc=input.nextLine();
- Utworz(nazwa,zawartosc);
- }
- void OtworzWybrane(){
- System.out.println("Otwieranie pliku");
- Scanner input = new Scanner(System.in);
- System.out.println("Wprowadź nazwę pliku");
- String nazwa = input.nextLine();
- Otworz(nazwa);
- }
- void UsunWybrane(){
- System.out.println("Usuwanie pliku");
- Scanner input = new Scanner(System.in);
- System.out.println("Wprowadź nazwę pliku");
- String nazwa = input.nextLine();
- Usun(nazwa);
- }
- };
- public static void main(String [] args){
- DyskTwardy HDD=new DyskTwardy();
- int menu;
- Scanner scan = new Scanner(System.in);
- do{
- System.out.println("\nMenu:");
- HDD.WyswietlKatalog();
- System.out.println("Dostepne operacje:");
- System.out.println("1.Dodaj plik 2.Otwórz plik 3.Usuń plik 4.Wyświetl Dysk 5.Wyświetl FAT 0.Wyjście");
- menu=scan.nextInt();
- switch (menu){
- case 1:{
- HDD.Pisz();
- break;
- }
- case 2:{
- HDD.OtworzWybrane();
- break;
- }
- case 3:{
- HDD.UsunWybrane();
- break;
- }
- case 4:{
- HDD.WyswietlDysk();
- break;
- }
- case 5:{
- HDD.WyswietlFAT();
- break;
- }
- default:{
- System.out.println("Nieprawidłowy numer, spróbuj ponownie");
- break;
- }
- }
- }while (menu!=0);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement