package javafx_meminfo; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.logging.Level; import java.util.logging.Logger; import java.util.stream.Stream; import javafx.application.Application; import javafx.beans.property.SimpleFloatProperty; import javafx.beans.property.SimpleIntegerProperty; import javafx.beans.property.SimpleStringProperty; import javafx.collections.FXCollections; import javafx.collections.ObservableList; import javafx.scene.Scene; import javafx.scene.control.TableColumn; import javafx.scene.control.TableView; import javafx.scene.control.cell.PropertyValueFactory; import javafx.scene.layout.StackPane; import javafx.stage.Stage; /** * * @web http://java-buddy.blogspot.com/ */ public class JavaFX_meminfo extends Application { final static String FILE_MEMINFO = "/proc/meminfo"; private final TableView<Record> tableMem = new TableView<>(); ObservableList<Record> listRecords = FXCollections.observableArrayList(); @Override public void start(Stage primaryStage) { prepareMemInfo(); tableMem.setEditable(false); TableColumn colMemField = new TableColumn("Field"); colMemField.setMinWidth(150); colMemField.setCellValueFactory( new PropertyValueFactory<>("memField")); TableColumn colMemValue = new TableColumn("Value"); colMemValue.setMinWidth(100); colMemValue.setCellValueFactory( new PropertyValueFactory<>("memValue")); TableColumn colMemUnit = new TableColumn("Unit"); colMemUnit.setMinWidth(50); colMemUnit.setCellValueFactory( new PropertyValueFactory<>("memUnit")); TableColumn colMemQty = new TableColumn("Qty"); colMemQty.setMinWidth(200); colMemQty.setCellValueFactory( new PropertyValueFactory<>("memQty")); tableMem.setItems(listRecords); tableMem.getColumns().addAll(colMemField, colMemValue, colMemUnit, colMemQty); StackPane root = new StackPane(); root.getChildren().add(tableMem); Scene scene = new Scene(root, 500, 250); primaryStage.setTitle("java-buddy"); primaryStage.setScene(scene); primaryStage.show(); } public static void main(String[] args) { launch(args); } private void prepareMemInfo() { Stream<String> streamMemInfo = readFile(FILE_MEMINFO); streamMemInfo.forEach((line) -> { System.out.println(line); //split one line by whitespace/grouped whitespaces String[] oneLine = line.split("\\s+"); for (String ele : oneLine) { System.out.println(ele); } System.out.println("---"); String rField = ""; int rMemValue = 0; String rMemUnit = ""; if (oneLine.length <= 3) { if (oneLine.length == 3) { rField = oneLine[0]; rMemValue = Integer.parseInt(oneLine[1]); rMemUnit = oneLine[2]; } else if (oneLine.length == 2) { rField = oneLine[0]; rMemValue = Integer.parseInt(oneLine[1]); rMemUnit = "B"; } else if (oneLine.length == 1) { rField = oneLine[0]; rMemValue = 0; rMemUnit = "B"; } Record record = new Record( rField, rMemValue, rMemUnit); listRecords.add(record); } }); } private Stream<String> readFile(String filePath) { Path path = Paths.get(FILE_MEMINFO); Stream<String> fileLines = null; try { fileLines = Files.lines(path); } catch (IOException ex) { Logger.getLogger(JavaFX_meminfo.class.getName()).log(Level.SEVERE, null, ex); } return fileLines; } public static class Record { private final SimpleStringProperty memField; private final SimpleIntegerProperty memValue; private final SimpleStringProperty memUnit; private final SimpleFloatProperty memQty; private Record(String memField, int memValue, String memUnit) { this.memField = new SimpleStringProperty(memField); this.memValue = new SimpleIntegerProperty(memValue); this.memUnit = new SimpleStringProperty(memUnit); if (memValue == 0) { this.memQty = new SimpleFloatProperty(0.0f); } else if (memUnit.equalsIgnoreCase("MB")) { this.memQty = new SimpleFloatProperty((float)memValue * 1000000.0f); } else if (memUnit.equalsIgnoreCase("kB")) { this.memQty = new SimpleFloatProperty((float)memValue * 1000.0f); }else { this.memQty = new SimpleFloatProperty((float)memValue); } } public String getMemField() { return memField.get(); } public int getMemValue() { return memValue.get(); } public String getMemUnit() { return memUnit.get(); } public float getMemQty() { return memQty.get(); } } }
next:
- Display /proc/meminfo on JavaFX PieChart
No comments:
Post a Comment