125 lines
3.8 KiB
Plaintext
125 lines
3.8 KiB
Plaintext
import java.io.*;
|
|
import java.util.*;
|
|
|
|
public class Exercise3 {
|
|
|
|
private final List<Recording> recordings = new ArrayList<>();
|
|
private Map<Integer, Double> salesData = new HashMap<>();
|
|
|
|
public void exportRecordings(String fileName) {
|
|
try (PrintWriter writer = new PrintWriter(new FileWriter(fileName))) {
|
|
// Skriv varje skiva i listan
|
|
for (Recording recording : recordings) {
|
|
writer.println("<recording>");
|
|
writer.println("\t<artist>" + recording.getArtist() + "</artist>");
|
|
writer.println("\t<title>" + recording.getTitle() + "</title>");
|
|
writer.println("\t<year>" + recording.getYear() + "</year>");
|
|
writer.println("\t<genres>");
|
|
|
|
// Skriv varje genre för inspelningen
|
|
for (String genre : recording.getGenre()) {
|
|
writer.println("\t\t<genre>" + genre + "</genre>");
|
|
}
|
|
|
|
writer.println("\t</genres>");
|
|
writer.println("</recording>");
|
|
}
|
|
|
|
System.out.println("Export lycklades");
|
|
} catch (IOException e) {
|
|
System.err.println("Error: Export misslyckades");
|
|
}
|
|
}
|
|
|
|
public void importRecordings(String fileName) {
|
|
|
|
try(BufferedReader reader = new BufferedReader(new FileReader(fileName))) { // input strömmar, gör så att en kan läsa text från fil mening för mening.
|
|
|
|
int numberOfRecordings = Integer.parseInt(reader.readLine().trim());//läser första meningen på filen, trim tar bort whitespaces.
|
|
|
|
for (int i = 0; i < numberOfRecordings; i++) { // itererar över antalet recordings.
|
|
|
|
String[] details = reader.readLine().trim().split(";"); // tar bort whitespaces och separerar med ;.
|
|
String artist = details[0]; //extraherar detaljerna
|
|
String title = details[1];
|
|
int year = Integer.parseInt(details[2]);
|
|
|
|
int genreCount = Integer.parseInt(reader.readLine().trim());// läser in nästa line för att se hur många genrer är associerade med recording
|
|
Set<String> genres = new HashSet<>(); //itererar över
|
|
|
|
for (int j = 0; j < genreCount; j++) {
|
|
genres.add(reader.readLine().trim());
|
|
}
|
|
recordings.add(new Recording(artist, title, year, genres));
|
|
}
|
|
|
|
reader.close();
|
|
} catch (FileNotFoundException e) {
|
|
System.out.println("Filen kunde inte hittas" + fileName);
|
|
} catch (IOException e) {
|
|
|
|
}finally {
|
|
|
|
}
|
|
}
|
|
|
|
public Map<Integer, Double> importSales(String fileName) {
|
|
|
|
int antalPos;
|
|
int year;
|
|
int month;
|
|
int day;
|
|
int nyckel;
|
|
double value;
|
|
|
|
//Försök öppna filen för att hämta data
|
|
try
|
|
{
|
|
DataInputStream infil = new DataInputStream(new FileInputStream(fileName));
|
|
antalPos = infil.readInt(); //Läs in från fil, första int som anger antal positioner
|
|
|
|
//Loopa igenom så många gånger som antalPos anger
|
|
while (antalPos != 0) {
|
|
//Hämta väderna från filen
|
|
year = infil.readInt();
|
|
month = infil.readInt();
|
|
day = infil.readInt();
|
|
value = infil.readDouble();
|
|
|
|
//Lägg in i Map
|
|
nyckel = year * 100 + month; //Nyckeln för mappen är år+månad (day ingår inte)
|
|
|
|
//Om månaden redan finns för året, hämta värdet och öka values med detta
|
|
if(salesData.containsKey(nyckel)) {
|
|
value =+ salesData.get(nyckel);
|
|
}
|
|
salesData.put(nyckel, value);
|
|
|
|
|
|
//minska antalPos
|
|
antalPos--;
|
|
}
|
|
|
|
infil.close();
|
|
}catch (FileNotFoundException e){
|
|
System.out.println("bin-Filen kunde inte hittas");
|
|
}
|
|
catch(IOException e)
|
|
{
|
|
e.printStackTrace(System.out);
|
|
}
|
|
return salesData;
|
|
}
|
|
|
|
//RÖR INTE
|
|
public List<Recording> getRecordings() {
|
|
return Collections.unmodifiableList(recordings);
|
|
}
|
|
|
|
//RÖR INTE
|
|
public void setRecordings(List<Recording> recordings) {
|
|
this.recordings.clear();
|
|
this.recordings.addAll(recordings);
|
|
}
|
|
}
|