Advertisement
PomozMi

FAT HDD

Feb 6th, 2015
276
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 7.01 KB | None | 0 0
  1. import java.util.LinkedList;
  2. import java.util.List;
  3. import java.util.Scanner;
  4.  
  5. public class layer4 {
  6.  
  7. public static class UCB {
  8. String Nazwa;
  9. int RozmiarPliku; //liczony w bajtach
  10. //Indeksy blokow
  11. private int PierwszyBlok;
  12. private int OstatniBlok;
  13.  
  14. UCB(String nazwa, int rozmiarpliku, int pierwszyblok, int ostatniblok){
  15. Nazwa=nazwa;
  16. RozmiarPliku=rozmiarpliku;
  17. PierwszyBlok=pierwszyblok;
  18. OstatniBlok=ostatniblok;
  19. }
  20. }; 
  21.  
  22. public static class DyskTwardy {
  23.  
  24. private int WielkoscBloku = 32;
  25. private int LiczbaBlokow = 32;
  26. byte[] Dysk;
  27. int FAT[];  //ostatni blok wskazuje na siebie, -1- blok wolny
  28. List <UCB> Katalog =new LinkedList <UCB>();
  29.  
  30. int SzukajWolnego(){
  31. for(int i=0;i<LiczbaBlokow;i++)
  32. if (FAT[i]==-1) return i;
  33. return -1;
  34. }
  35.  
  36. int SzukajKolejnego(int blok){
  37. return FAT[blok];
  38. }
  39.  
  40. DyskTwardy(){
  41. Dysk=new byte[WielkoscBloku*LiczbaBlokow];
  42. FAT=new int[LiczbaBlokow];
  43. UtworzFAT();
  44. Katalog =new LinkedList <UCB>();
  45. }
  46.  
  47. void UtworzFAT(){
  48. for (int i=0; i<LiczbaBlokow; i++)
  49. FAT[i]=-1;
  50. }
  51.  
  52. void WyswietlFAT(){
  53. System.out.println("Tablica FAT: ");
  54. for (int i=0;i<LiczbaBlokow;i++){
  55. System.out.println (i + ".\t" + FAT[i]);
  56. }
  57. }
  58.  
  59. void WyswietlKatalog(){
  60. System.out.println("Katalog: ");
  61. System.out.println("/...");
  62. for (int i=0; i<Katalog.size();i++)
  63. System.out.println(" -" +Katalog.get(i).Nazwa+"\n");
  64. System.out.println("\n");
  65.  
  66. }
  67.  
  68. void WyswietlDysk(){
  69. System.out.println("Zawartość Dysku: ");
  70. for (int j=0; j<LiczbaBlokow; j++){
  71. System.out.print (j+".\t");
  72. for(int i=WielkoscBloku*j;i<j*WielkoscBloku+WielkoscBloku;i++)
  73. System.out.print (Dysk[i]+"\t");
  74. System.out.print ("\n");
  75. }
  76. }
  77.  
  78. void Stan(){
  79. WyswietlDysk();
  80. WyswietlFAT();
  81. WyswietlKatalog();
  82. }
  83.  
  84. String SprawdzNazwe(String nazwa){
  85. int n=0; String temp=nazwa;
  86. for (int i=0; i<Katalog.size();i++){
  87. if(Katalog.get(i).Nazwa.contains(nazwa)){
  88. //nazwa=nazwa+'*';
  89. n++;
  90. nazwa=temp+'['+n+']';
  91. i=-1;
  92. }
  93. }
  94. if (n!=0){
  95. nazwa=temp+'['+n+']';
  96. System.out.println("Nadana nazwa już w użyciu. Zmieniono na: "+nazwa);
  97. }
  98. return nazwa;
  99. }
  100. public void Utworz(String nazwa, String zawartosc){
  101. //System.out.println("Stan przed dodaniem pliku "+nazwa+": ");
  102. //Stan();
  103. byte[] a=zawartosc.getBytes();
  104. if (SzukajWolnego()>-1 && zawartosc.length()<=(WielkoscBloku*LiczbaBlokow)){
  105. int wolny[]=new int [(a.length/WielkoscBloku)+1]; //tablica indeksow wolnych blokow
  106. System.out.println("Rozmiar pliku: "+zawartosc.length()+" B");
  107.  
  108. System.out.println("Ilość potrzebnych bloków dysku: "+((a.length/WielkoscBloku)+1));
  109. System.out.print("Numery zajmowanych bloków dysku: ");
  110. for (int i=0;i<(a.length/WielkoscBloku)+1;i++){
  111. System.out.print(SzukajWolnego()+"\t");
  112. wolny[i]=SzukajWolnego();
  113. FAT[wolny[i]]=wolny[i];
  114. if(i!=0) FAT[wolny[i-1]]=wolny[i];
  115. }
  116. System.out.println("\n");
  117.  
  118. FAT[wolny[(a.length/WielkoscBloku)]]=wolny[(a.length/WielkoscBloku)];  
  119.  
  120. int n=0;
  121.  
  122. for (int j=0;j<wolny.length;j++){
  123. for (int i=(wolny[j]*WielkoscBloku); i<(wolny[j]*WielkoscBloku)+WielkoscBloku; i++){
  124. while (n<a.length&&i<(wolny[j]*WielkoscBloku)+WielkoscBloku){
  125. Dysk[i]=a[n];
  126. n++; i++;
  127. }
  128. }
  129. }
  130.  
  131. UCB plik=new UCB(nazwa, a.length, wolny[0], wolny[(a.length/WielkoscBloku)]);
  132. Katalog.add(plik);
  133. System.out.println(nazwa+"- Plik zostal dodany\n");
  134. //Stan();
  135. }
  136. else System.out.println("Brak miejsca na dysku");
  137. }
  138.  
  139. public void Otworz(String nazwa){
  140. System.out.println("Otwieranie pliku "+nazwa+ "...");
  141. int x=-1;
  142. //System.out.println("Size:" + a);
  143. for (int i=0; i<Katalog.size();i++){
  144. if (Katalog.get(i).Nazwa.equals(nazwa))
  145. x=i;
  146. }
  147. if (x!=-1){
  148. byte zawartosc[]=new byte[Katalog.get(x).RozmiarPliku];
  149. int[] zajety=new int[((Katalog.get(x).RozmiarPliku)/WielkoscBloku+1)];
  150. zajety[0]=Katalog.get(x).PierwszyBlok;
  151. System.out.print("Bloki zajmowane przez plik: " + zajety[0] + " ");
  152. if (Katalog.get(x).RozmiarPliku>WielkoscBloku){
  153. int temp=SzukajKolejnego(Katalog.get(x).PierwszyBlok);
  154. int i=1;   
  155. do{
  156. zajety[i]=temp;
  157. temp=SzukajKolejnego(SzukajKolejnego(temp));
  158. System.out.print(zajety[i]+" ");
  159. }
  160. while(SzukajKolejnego(temp)!=Katalog.get(x).OstatniBlok);
  161. }
  162. System.out.print("\n");
  163. int n=0;
  164.  
  165. for (int j=0;j<zajety.length;j++){
  166. for (int i=(zajety[j]*WielkoscBloku);i<(zajety[j]*WielkoscBloku)+WielkoscBloku;i++){
  167. while (n<zawartosc.length&&i<(zajety[j]*WielkoscBloku)+WielkoscBloku){ 
  168. zawartosc[n]=Dysk[i];
  169. n++; i++;
  170. }
  171. }
  172. }
  173. System.out.println("Otwarto plik "+nazwa+"\nZawartość pliku: ");
  174. String wyjscie = new String (zawartosc);
  175. System.out.println(wyjscie);
  176. }
  177. else System.out.println("Nie znaleziono pliku.");
  178. }
  179.  
  180. public void Usun(String nazwa){
  181. //System.out.println("Stan przed dodaniem pliku "+nazwa+": ");
  182. //Stan();
  183. int x=-1;
  184. for (int i=0; i<Katalog.size();i++){
  185. if (Katalog.get(i).Nazwa.equals(nazwa))
  186. x=i;
  187. }
  188. if (x!=-1){
  189. //byte zawartosc[]=new byte[Katalog.get(x).RozmiarPliku];
  190. int[] zajety=new int[((Katalog.get(x).RozmiarPliku)/WielkoscBloku)+1];
  191. zajety[0]=Katalog.get(x).PierwszyBlok;
  192. if (Katalog.get(x).RozmiarPliku>WielkoscBloku){
  193. int temp=SzukajKolejnego(Katalog.get(x).PierwszyBlok);
  194. int i=1;
  195. do{
  196. zajety[i]=temp;
  197. temp=SzukajKolejnego(SzukajKolejnego(temp));
  198. System.out.println(zajety[i]);
  199. i++;
  200. }
  201. while(SzukajKolejnego(temp)!=Katalog.get(x).OstatniBlok);
  202. }
  203. zajety[zajety.length-1]=Katalog.get(x).OstatniBlok;
  204. int n=0;
  205.  
  206. for (int j=0;j<zajety.length;j++){
  207. FAT[zajety[j]]=-1;
  208. for (int i=(zajety[j]*WielkoscBloku);i<(zajety[j]*WielkoscBloku)+WielkoscBloku;i++){
  209. while (n<Katalog.get(x).RozmiarPliku&&i<(zajety[j]*WielkoscBloku)+WielkoscBloku){
  210. Dysk[i]=0;
  211. //System.out.println(zawartosc[n]);
  212. n++; i++;
  213. }
  214. }
  215. }
  216.  
  217. Katalog.remove(x);
  218. System.out.println("Usunięto plik "+nazwa);
  219. //Stan();
  220. }
  221. else System.out.println("Nie znaleziono pliku");
  222. }
  223.  
  224. void Pisz(){
  225. System.out.println("Tworzenie pliku");
  226. Scanner input = new Scanner(System.in);
  227. System.out.println("Wprowadź nazwę pliku");
  228. String nazwa = input.nextLine();
  229. nazwa=SprawdzNazwe(nazwa);
  230. System.out.println("Wprowadź zawartość pliku");
  231. String zawartosc=input.nextLine();
  232. Utworz(nazwa,zawartosc);
  233. }
  234.  
  235. void OtworzWybrane(){
  236. System.out.println("Otwieranie pliku");
  237. Scanner input = new Scanner(System.in);
  238. System.out.println("Wprowadź nazwę pliku");
  239. String nazwa = input.nextLine();
  240. Otworz(nazwa);
  241. }
  242.  
  243. void UsunWybrane(){
  244. System.out.println("Usuwanie pliku");
  245. Scanner input = new Scanner(System.in);
  246. System.out.println("Wprowadź nazwę pliku");
  247. String nazwa = input.nextLine();
  248. Usun(nazwa);
  249. }
  250. };
  251.  
  252. public static void main(String [] args){
  253. DyskTwardy HDD=new DyskTwardy();
  254. int menu;
  255. Scanner scan = new Scanner(System.in);
  256. do{
  257. System.out.println("\nMenu:");
  258. HDD.WyswietlKatalog();
  259. System.out.println("Dostepne operacje:");
  260. System.out.println("1.Dodaj plik    2.Otwórz plik  3.Usuń plik    4.Wyświetl Dysk 5.Wyświetl FAT    0.Wyjście");
  261. menu=scan.nextInt();   
  262. switch (menu){
  263. case 1:{
  264. HDD.Pisz();
  265. break;
  266. }
  267. case 2:{
  268. HDD.OtworzWybrane();
  269. break;
  270. }
  271. case 3:{
  272. HDD.UsunWybrane();
  273. break;
  274. }
  275. case 4:{
  276. HDD.WyswietlDysk();
  277. break;
  278. }
  279. case 5:{
  280. HDD.WyswietlFAT();
  281. break;
  282. }
  283. default:{
  284. System.out.println("Nieprawidłowy numer, spróbuj ponownie");
  285. break;
  286. }
  287. }
  288. }while (menu!=0);
  289. }
  290. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement