Linux Inside
91
import java.util.Arrays;
public class Discotheque {
// Ιδιότητες κλάσης
static String syskeves[];
static PrintStream ArxeioExodou;
// Βασική μέθοδος (κυρίως πρόγραμμα)
public static void
main(String[] args)
throws IOException {
int i, epilogi;
String temp, OutputFile;
// Φάκελος προσάρτησης συσκευών (Ubuntu)
String thesi = "/media/";
// Γέμισμα πίνακα syskeves[] με ονόματα
FakeloiThesis(new File(thesi));
// Εμφάνιση μηνύματος
System.out
.println("Οι δισκοι της θέσης "
+ thesi + " είναι οι εξής:");
// Επανάληψη για εμφάνιση των συσκευών
for (i = 0; i < syskeves.length; i++) {
System.out.println(i + "."
+ syskeves[i]);
}
System.out
.println("Ποιου δίσκου τα αρχεία"
+ " να καταγράψω; (δώστε αριθμό): ");
// Διάβασμα της επιλογής χρήστη ως
// συμβολοσειράς από το πληκτρολόγιο
InputStreamReader converter =
new InputStreamReader(System.in);
BufferedReader in =
new BufferedReader(converter);
temp = in.readLine();
// Μετατροπή συμβολοσειράς σε ακέραιο
epilogi = Integer.parseInt(temp);
System.out
.println("Παρακαλώ περιμένετε.");
// Παράθεση σχηματισμού ονόματος αρχείου
OutputFile =
"Disc_" + syskeves[epilogi]
+ ".xml";
// Ενότητα try-catch αυτόματης αντιμετώπισης
// σφάλματος κατά την επεξεργασία αρχείου
try {
// Δημιουργία αρχείου XML
ArxeioExodou =
new PrintStream(
new FileOutputStream(
OutputFile));
// Εγγραφή κεφαλής και στοιχείου ρίζας
ArxeioExodou
.println("<?xml version=\"1.0"
+ "\" encoding=\"UTF-8\"?>");
ArxeioExodou
.println("<disc name=\""
+ syskeves[epilogi] + "\">");
// Καταγραφή αρχείων διαδρομής
KatagrafiDiadromis(new File(thesi
+ syskeves[epilogi]));
// Εγγραφή ετικέτας κλεισίματος
ArxeioExodou.println("</disc>");
// Κλείσιμο αρχείου
ArxeioExodou.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
System.out.println("Το αρχείο "
+ "δημιουργήθηκε!");
}
// Μέθοδος καταγραφής δομής αρχείων
private static void
KatagrafiDiadromis(File path) {
File files[]; // πίνακας αρχείων
int i, n;
String OnomaArxeiou;
// Γέμισμα και ταξινόμηση πίνακα αρχείων
// από τα περιεχόμενα της διαδρομής
files = path.listFiles();
Arrays.sort(files);
n = files.length;
// Επανάληψη για κάθε όνομα αρχείου
for (i = 0; i < n; i++) {
// Αντικατάσταση μη επιτρεπτών XML
// χαρακτήρων
OnomaArxeiou =
AntikAnafOntotiton(files[i]
.getName());
// Εάν φάκελος, τότε...
if (files[i].isDirectory()) {
ArxeioExodou
.println("<dir name=\""
+ OnomaArxeiou + "\">");
// Αναδρομική κλήση για υποφάκελο
KatagrafiDiadromis(files[i]);
ArxeioExodou.println("</dir>");
} else {
// Αλλιώς απλά εγγραφή ονόματος αρχείου
ArxeioExodou
.println(OnomaArxeiou);
}
}
}
// Μέθοδος γεμίσματος πίνακα syskeves
private static void FakeloiThesis(
File path) {
File fakeloi[];
int i, j = 0, n = 0;
// Γέμισμα πίνακα με ονόματα αρχείων
fakeloi = path.listFiles();
// Επανάληψη για κάθε αρχείο...
for (i = 0; i < fakeloi.length; i++) {
// Καταμέτρηση μόνο των φακέλων
if (fakeloi[i].isDirectory()) {
n++;
}
}
// Δέσμευση χώρου για n στοιχεία
syskeves = new String[n];
// Επανάληψη για γέμισμα πίνακα μόνο με
// ονόματα φακέλων
for (i = 0; i < fakeloi.length; i++) {
if (fakeloi[i].isDirectory()) {
syskeves[j] =
Linux Labs - Java