Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.multistorage;
- import java.io.File;
- import java.io.FileNotFoundException;
- import java.io.FileReader;
- import java.io.FileWriter;
- import java.io.IOException;
- import java.util.Scanner;
- import com.google.gson.Gson;
- import com.google.gson.JsonIOException;
- import com.google.gson.JsonSyntaxException;
- import com.storage.Article;
- public class StorageSystem
- {
- private static final String STORAGE_FILE_TYPE = ".json";
- private static final String STORAGE_FILE_NAME_PREFIX = "storage";
- private static final int STORAGE_FILE_SPLIT_SIZE = 100000;
- private final String PATH_TO_LINK_FILE = "src/com/multistorage/visitedlinks.txt";
- private final String PATH_TO_STORAGE_FOLDER;
- private int amountFilesInFolder;
- private int currentFileSize;
- private File latestFile;
- private Gson gson;
- private FileReader fr;
- private FileWriter jsonWriter;
- private FileWriter linkWriter;
- public StorageSystem(String PATH_TO_STORAGE_FOLDER)
- {
- this.PATH_TO_STORAGE_FOLDER = PATH_TO_STORAGE_FOLDER;
- this.amountFilesInFolder = getAmountFilesInFolder();
- this.gson = new Gson();
- }
- public void store(Article article, String linkToCheck) throws IOException
- {
- this.amountFilesInFolder = getAmountFilesInFolder();
- if(amountFilesInFolder == 0)
- {
- latestFile = new File(PATH_TO_STORAGE_FOLDER + "\\" + STORAGE_FILE_NAME_PREFIX + amountFilesInFolder + STORAGE_FILE_TYPE);
- System.out.println(latestFile.getAbsolutePath());
- //System.out.println(latestFile.getPath());
- try
- {
- latestFile.createNewFile();
- } catch (IOException e)
- {
- e.printStackTrace();
- }
- }
- latestFile = getLatestFile();
- jsonWriter = new FileWriter(latestFile);
- linkWriter = new FileWriter(PATH_TO_LINK_FILE, true);
- Article[] contentOfFileArray = null;
- try
- {
- contentOfFileArray = gson.fromJson(new FileReader(latestFile), Article[].class);
- } catch (JsonSyntaxException | JsonIOException | FileNotFoundException e1)
- {
- e1.printStackTrace();
- }
- //System.out.println(contentOfFileArray.length);
- if(contentOfFileArray == null)
- {
- contentOfFileArray = new Article[0];
- }
- contentOfFileArray = getNewArticleArray(contentOfFileArray, article);
- if(latestFile.length() < STORAGE_FILE_SPLIT_SIZE)
- {
- if(isDuplicate(new File(PATH_TO_LINK_FILE), linkToCheck) == false)
- {
- try
- {
- System.out.println(linkToCheck);
- System.out.println(latestFile.getPath());
- jsonWriter.write(gson.toJson(contentOfFileArray));
- jsonWriter.flush();
- int hashcode = linkToCheck.hashCode();
- linkWriter.write(hashcode + "\n");
- linkWriter.flush();
- } catch (Exception e)
- {
- }
- }
- } else
- {
- System.out.println("Datei ist zu groß. Neue Datei wird erstellt.");
- }
- }
- public int getAmountFilesInFolder()
- {
- return new File(PATH_TO_STORAGE_FOLDER).list().length;
- }
- public File getLatestFile()
- {
- File[] fileArray = new File(PATH_TO_STORAGE_FOLDER).listFiles();
- return fileArray[fileArray.length - 1];
- }
- public Article[] getNewArticleArray(Article[] oldArray, Article article)
- {
- Article[] oldArrayCopy = new Article[oldArray.length + 1];
- for(int i = 0; i < oldArray.length - 1; i++)
- {
- oldArrayCopy[i] = oldArray[i];
- }
- oldArrayCopy[oldArrayCopy.length - 1] = article;
- return oldArrayCopy;
- }
- public boolean isDuplicate(File linkFile, String link) throws IOException
- {
- Scanner scan = new Scanner(linkFile);
- int hashWert = link.hashCode();
- while(scan.hasNextLine())
- {
- String line = scan.nextLine();
- int lineWert = Integer.parseInt(line);
- if(lineWert == hashWert)
- {
- return true;
- }
- }
- return false;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement