2016-08-10 3 views
1

Я преподавал JavaFX, и я разрабатываю простой калькулятор передачи файлов. Он вычисляет размеры файлов, скорость передачи и время передачи.Java - Каков наилучший способ сделать параметры загрузки программы из файла?

Я хочу, чтобы иметь возможность загружать мои текущие параметры из файла (например, мегабайты, гигабайты и т. Д.) В несколько JavaFX ChoiceBoxes. Мне нужно:

  • файла Размеры
  • Скорость передачи данных
  • единицы времени

И мне нужно иметь информацию о том, как они преобразовывают, так как пользователь может понадобиться знать, сколько времени в секундах, потребуется передать 1 ТБ данных через соединение 42 КБ/с.

Я думал об использовании текстового файла, но это было бы слишком сложной задачей, так как это было достаточно легко, чтобы читать файл, и было бы сложно автоматизировать процесс записи. Я думал об использовании XML для этого, но я понятия не имею, как использовать его для этой цели или если это будет хорошей идеей. Итак, что было бы лучшим способом загрузить параметры и информацию по каждому из них? И как его использовать?

package application; 

import java.io.ObjectInputStream.GetField; 
import java.net.URL; 
import java.util.ArrayList; 
import java.util.List; 
import java.util.ResourceBundle; 

import javafx.collections.FXCollections; 
import javafx.collections.ObservableList; 
import javafx.event.ActionEvent; 
import javafx.fxml.FXML; 
import javafx.fxml.Initializable; 
import javafx.scene.control.Alert; 
import javafx.scene.control.Button; 
import javafx.scene.control.ChoiceBox; 
import javafx.scene.control.RadioButton; 
import javafx.scene.control.TextField; 
import javafx.scene.control.Alert.AlertType; 

public class MainInterfaceController implements Initializable { 

    /* 
    * Declarations of the interface interactive bits FS - File Size TS - 
    * Transfer Speed TT - Transfer Time 
    */ 
    @FXML 
    private TextField FSTextField; 

    @FXML 
    private ChoiceBox<String> FSChoiceBox; 

    @FXML 
    private RadioButton FSRadioButton; 

    @FXML 
    private TextField TSTextField; 

    @FXML 
    private ChoiceBox<String> TSChoiceBox; 

    @FXML 
    private RadioButton TSRadioButton; 

    @FXML 
    private TextField TTTextField; 

    @FXML 
    private ChoiceBox<String> TTChoiceBox; 

    @FXML 
    private RadioButton TTRadioButton; 

    @FXML 
    private Button AboutButton; 

    @FXML 
    private Button CalculateButton; 

    // Variables & Data Sets 

    //These should be initialized in the init method so they can be populated with info from a file(?) 
    private ObservableList<String> fileSizes = FXCollections.observableArrayList("KB", "MB", "GB", "TB", "PB"); 
    private ObservableList<String> transferSpeeds = FXCollections.observableArrayList("KB/s", "MB/s", "GB/s", "TB/s", "PB/s"); 
    private ObservableList<String> timeUnits = FXCollections.observableArrayList("Seconds", "Minutes", "Hours"); 


    @Override 
    public void initialize(URL location, ResourceBundle resources) { 
     populateChoiceBoxes(); 
     setRadioButtonsActions(); 
     CalculateButton.setOnAction(e -> calculateValues()); 
    } 

    private void populateChoiceBoxes() { 
     FSChoiceBox.setItems(fileSizes); 
     TSChoiceBox.setItems(transferSpeeds); 
     TTChoiceBox.setItems(timeUnits); 
    } 

    private void setRadioButtonsActions() { 
     FSRadioButton.setOnAction(e -> clearRadioButtons(e)); 
     TSRadioButton.setOnAction(e -> clearRadioButtons(e)); 
     TTRadioButton.setOnAction(e -> clearRadioButtons(e)); 
    } 

    private void clearRadioButtons(ActionEvent e) { 
     if (e.getSource() == FSRadioButton) { 
      TSRadioButton.setSelected(false); 
      TTRadioButton.setSelected(false); 
     } 

     if (e.getSource() == TSRadioButton) { 
      FSRadioButton.setSelected(false); 
      TTRadioButton.setSelected(false); 
     } 

     if (e.getSource() == TTRadioButton) { 
      FSRadioButton.setSelected(false); 
      TSRadioButton.setSelected(false); 
     } 
    } 

    private void calculateValues() { 
     if (FSRadioButton.isSelected()) { 
      try { 
       String TSText = TSTextField.getText(); 
       double transferSpeed = Double.parseDouble(TSText); 
       String TTText = TTTextField.getText(); 
       double transferTime = Double.parseDouble(TTText); 

      } catch (NumberFormatException e) { 
       Alert alert = new Alert(AlertType.ERROR, "The transfer speed/transfer time must be a number!"); 
       alert.showAndWait(); 
      } 

     } 
    } 

    private void convertSpeed(double transferSpeed, ChoiceBox<String> speedUnit) { 
    } 
} 

До сих пор у меня был код выше. Как вы можете видеть в начале, я объявляю ObservableLists. Это то, что я хочу автоматизировать и окончательный метод преобразования. Таким образом, программа будет более гибкой и легко обновляемой.

+0

Возможно, INI-файлов? – sMaN

+0

http://stackoverflow.com/questions/190629/what-is-the-easiest-way-to-parse-an-ini-file-in-java – sMaN

+0

@sMaN Вы можете уточнить, как это работает? – Elegea

ответ

3

Стандартный способ сделать это в Java есть с .properties файла, который вступает в брак с классом java.util.Properties

Существует стандартный формат либо:

  • key=value
  • <entry key="key">value</entry>

Класс Properties имеет стандартные способы загрузки опоры erties и доступ к ним из объекта Properties.

ссылающийся на J2SE Javadoc примером может быть:

Properties properties = new Properties(); 
try(InputStream is = this.getClass().getResourceAsStream("my.properties")) { 
    properties.load(is); 
} 
String value = properties.getProperty("key"); 
+0

Для того, что я прочитал, файл свойств разрешил мне использовать только один ключ и одно значение. Например: MB - 1024 КБ Однако что мне делать, если мне нужно иметь больше пар МБ? Как MB - 1024 КБ - 1/1024 ГБ? – Elegea

+0

Здесь https://www.mkyong.com/java/java-properties-file-examples/ - множество примеров для нескольких свойств. – sMaN

+0

Многие ключи, но каждый ключ только один раз. Каждый ключ уникален. Если вам нужно много значений для ключа, сделайте это как список с разделителями-запятыми, например 'key = v1, v2, v3', а затем проанализируйте значения отдельно. – Stewart

0

Есть две разные библиотеки, которые я бы рекомендовал для хранения данных в java. Первый из них - простой для пользователя простой и простой в использовании, и для его работы требуется небольшая настройка, чтобы найти его. here также есть много учебников. Другой вариант - использовать yaml. Библиотека snake yaml действительно хороша для этого и снова легко настраивается, и в Интернете есть много обучающих программ. вы можете найти его here.

Смежные вопросы