Nochmal eine Array Frage

  • Java

Es gibt 15 Antworten in diesem Thema. Der letzte Beitrag () ist von Andy16823.

    Nochmal eine Array Frage

    So Tagchen
    Ich versuche gerade alle Files eines Verzeichnisses in ein Array zu laden und dann mit dem User Text abgleichen welche der Datennamen übereinstimmen. Mit meinem jetzigen Code wird aber alles übereinstimmende in einzelnen Fenster dargestellt und 10 mal oder mehr untereinander gelistet. Ich vermute mal das ich da irgendwo durchloope Kann mir jemand sagen was ich hier falsch mache?

    Quellcode

    1. String path = "C:/Users/" + userName + "/AppData/Local/Networkadm/";
    2. String files;
    3. File folder = new File(path);
    4. File[] listOfFiles = folder.listFiles();
    5. File allData = new File(path);
    6. for (File checkedFile : listOfFiles) {
    7. if (checkedFile.isFile()) {
    8. files = checkedFile.getName();
    9. if (files.startsWith(jTextField1.getText())) {
    10. JFrame frame = new JFrame();
    11. frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    12. try {
    13. UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
    14. } catch (Exception e) {
    15. e.printStackTrace();
    16. }
    17. Vector rowData = new Vector();
    18. Vector<String> columnNames = new Vector<String>();
    19. columnNames.addElement("ID");
    20. columnNames.addElement("Bezeichung");
    21. columnNames.addElement("Standort");
    22. String[] DIR = allData.list();
    23. for (String s : DIR) {
    24. String[] strings = s.replaceAll(".dat", "").split(",");
    25. Vector colData = new Vector(Arrays.asList(files.replaceAll(".dat", "").split(",")));
    26. rowData.add(colData);
    27. for(int i=0; i< strings.length; i++) {
    28. if(strings[i].startsWith(jTextField1.getText())){
    29. for (String input : DIR) {
    30. }
    31. }
    32. for (String results : DIR) {
    33. }
    34. }
    35. Vector columnNamesV = new Vector(columnNames);
    36. JTable table = new JTable(rowData, columnNamesV);
    37. JScrollPane scrollPane = new JScrollPane(table);
    38. frame.add(scrollPane, BorderLayout.CENTER);
    39. frame.setSize(1000, 150);
    40. frame.setVisible(true);
    41. }
    42. }
    43. }
    44. }
    Metal-Schweiz wurde nun offiziell veröffentlich nach all den Jahren :)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Orion“ ()

    Naja es funktioniert eben nicht wie es sollte. Es soll mir jede gefundene Datei untereinander in einem Frame listen und nicht einzelne Frames erstellen für jede Datei und diese dann zig male listen.
    Metal-Schweiz wurde nun offiziell veröffentlich nach all den Jahren :)

    Ich weiss nicht wie genau das ganze geht xD ich bin echt ahnungslos in Java und probier da solange rum bis es so funktioniert wie ich will.
    Momentan funktioniert schonmal die Suche wie sie soll nun der einzige Haken ist noch das es mir für jedes Ergebnis ein neues Fenster aufbaut. Kann mir wer sagen wie ich das eben korrekt mache wie schon mal erwähnt das die untereinander in einer Table gelistet werden? Der Code sieht momentan so aus:

    Quellcode

    1. String s;
    2. File dir = new File("C:/Users/" + userName + "/AppData/Local/Networkadm/");
    3. FilenameFilter filter = new FilenameFilter() {
    4. public boolean accept(File dir, String name) {
    5. return name.contains(jTextField1.getText());
    6. }
    7. };
    8. String[] children = dir.list(filter);
    9. if (children.length == 0) {
    10. JOptionPane.showConfirmDialog(null, "Ihre Eingabe erzielte keine Treffer", "Nichts gefunden", JOptionPane.OK_CANCEL_OPTION);
    11. } else {
    12. for (int i = 0; i < children.length; i++) {
    13. String filename = children[i];
    14. File allData = new File("C:/Users/" + userName + "/AppData/Local/Networkadm/");
    15. JFrame frame = new JFrame();
    16. frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    17. Vector rowData = new Vector();
    18. Vector<String> columnNames = new Vector<String>();
    19. columnNames.addElement("ID");
    20. columnNames.addElement("Bezeichung");
    21. columnNames.addElement("Standort");
    22. String[] DIR = allData.list();
    23. String[] strings = filename.replaceAll(".dat", "").split(",");
    24. Vector colData = new Vector(Arrays.asList(strings));
    25. rowData.add(colData);
    26. Vector columnNamesV = new Vector(columnNames);
    27. frame.setLocationByPlatform(true);
    28. JTable table = new JTable(rowData, columnNamesV);
    29. JScrollPane scrollPane = new JScrollPane(table);
    30. frame.add(scrollPane, BorderLayout.CENTER);
    31. frame.setSize(1000, 150);
    32. frame.setVisible(true);
    Metal-Schweiz wurde nun offiziell veröffentlich nach all den Jahren :)

    Hy

    Java-Quellcode

    1. String s;
    2. Vector rowData = new Vector();
    3. File dir = new File("C:/Users/" + userName + "/AppData/Local/Networkadm/");
    4. FilenameFilter filter = new FilenameFilter() {
    5. public boolean accept(File dir, String name) {
    6. return name.contains(jTextField1.getText());
    7. }
    8. };
    9. String[] children = dir.list(filter);
    10. if (children.length == 0) {
    11. JOptionPane.showConfirmDialog(null, "Ihre Eingabe erzielte keine Treffer", "Nichts gefunden", JOptionPane.OK_CANCEL_OPTION);
    12. } else {
    13. for (int i = 0; i < children.length; i++) {
    14. String filename = children[i];
    15. File allData = new File("C:/Users/" + userName + "/AppData/Local/Networkadm/");
    16. String[] DIR = allData.list();
    17. String[] strings = filename.replaceAll(".dat", "").split(",");
    18. Vector colData = new Vector(Arrays.asList(strings));
    19. rowData.add(colData);
    20. // Hier Schleife Schließen
    21. }
    22. Vector<String> columnNames = new Vector<String>();
    23. columnNames.addElement("ID");
    24. columnNames.addElement("Bezeichung");
    25. columnNames.addElement("Standort");
    26. Vector columnNamesV = new Vector(columnNames);
    27. // Frame
    28. JFrame frame = new JFrame();
    29. frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    30. frame.setLocationByPlatform(true);
    31. JTable table = new JTable(rowData, columnNamesV);
    32. JScrollPane scrollPane = new JScrollPane(table);
    33. frame.add(scrollPane, BorderLayout.CENTER);
    34. frame.setSize(1000, 150);
    35. frame.setVisible(true);


    Deine Schleife war nicht zu
    Ok, denke das ich dafür nicht einen neuen Thread aufmachen muss. Aber kann mir jemand sagen wie ich eine jFormattedTextfield auf maximal 999.95 begrenzen kann? Habs bereits mit einem Formatter versucht, funktioniert aber nicht :/ Das Feld wird benutzt um den Einkaufspreis anzugeben und der darf nicht über 1000 sein.
    Metal-Schweiz wurde nun offiziell veröffentlich nach all den Jahren :)

    mir fällt gerade ein, prüfe doch im TextCahnge Event mit einem If ob der Text größer ist als 999.95 ist wenn ja wirf einen Dialog das der Wert überschritten wurde und lösche den Text. Für das Event hab ich hier ein link stackoverflow.com/questions/77…event-in-jtextarea-how-to der ist besser
    stackoverflow.com/questions/39…ge-listener-to-jtextfield
    Hat leider nicht funktioniert :/ wäre auch zu einfach und schön gewesen...
    Noch eine 2. Frage hab ich auch

    Quellcode

    1. Load.addActionListener(new ActionListener() {
    2. @Override
    3. public void actionPerformed(ActionEvent event) {
    4. try {
    5. int sZel = table.getSelectedRow();
    6. final String IDs = table.getModel().getValueAt(sZel, 0).toString();
    7. File dir = new File("C:/Users/" + userName + "/AppData/Local/Networkadm/");
    8. FilenameFilter filter = new FilenameFilter() {
    9. public boolean accept(File dir, String name) {
    10. return name.startsWith(IDs + ",");
    11. }
    12. };
    13. String[] children = dir.list(filter);
    14. if (children.length == 0) {
    15. JOptionPane.showConfirmDialog(null, "Daten konnten nicht geladen werden", "Fehler", JOptionPane.OK_CANCEL_OPTION);
    16. } else {
    17. System.out.println("found!");
    18. }
    19. } catch (ArrayIndexOutOfBoundsException e) {
    20. JOptionPane.showConfirmDialog(null, "Kein Datensatz gewählt", "Fehler", JOptionPane.OK_CANCEL_OPTION);
    21. }
    22. }
    23. });

    Ich bin jetzt so weit das ich die Zelle aus der Table lesen kann. Danach filter ich wieder das Dateiverzeichnis durch bis zum Datensatz den ich haben will. Wie lade ich nun diesen Datensatz wieder in die Maske um sie zu bearbeiten? :/ Ich brauche ja den Inhalt der Maske. Für jede Textbox wird vorher beim Speichern eines Satzes eine Linie genutzt welche am Schluss mit einem , versehen wird.
    Das ganze sieht dort so aus:

    Quellcode

    1. try {
    2. PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("C:/Users/" + userName + "/AppData/Local/Networkadm/" + jFormattedTextField7.getText() + "," + jTextField2.getText() + "," + jTextField7.getText() + "," + ".dat")));
    3. out.println(jFormattedTextField7.getText());
    4. out.println(jTextField1.getText() + ",");
    5. if (jRadioButton1.isSelected()) {
    6. out.println("Switch" + ",");
    7. }
    8. if (jRadioButton2.isSelected()) {
    9. out.println("HUB" + ",");
    10. }
    11. if (jRadioButton3.isSelected()) {
    12. out.println("Anderes" + ",");
    13. }
    14. if (jRadioButton4.isSelected()) {
    15. out.println("Router" + ",");
    16. }
    17. if (jRadioButton5.isSelected()) {
    18. out.println("Printserver" + ",");
    19. }
    20. out.println(jComboBox2.getSelectedItem() + ",");
    21. out.println(jComboBox1.getSelectedItem() + ",");
    22. out.println(jTextField2.getText() + ",");
    23. out.println(jFormattedTextField2.getText() + ",");
    24. out.println(jFormattedTextField3.getText() + ",");
    25. out.println(jFormattedTextField4.getText() + ",");
    26. out.println(jFormattedTextField5.getText() + ",");
    27. out.println(jTextField7.getText() + ",");
    28. out.println(jFormattedTextField6.getText() + ",");
    29. out.println(jCheckBox1.isSelected() + ",");
    30. out.close();
    31. } catch (IOException e) {
    32. JOptionPane.showConfirmDialog(null, "Datensatz konnte nicht erstellt werden", "Fehler", JOptionPane.OK_CANCEL_OPTION);
    33. }

    Die Radiobuttons habe ich umgeschrieben weil die Dateien selber auch mit einem Editor lesbar sein sollen.
    Metal-Schweiz wurde nun offiziell veröffentlich nach all den Jahren :)

    Steht ja im zweiten Abschnitt wie sie dann aussehen wird, der Name ist zb.

    5,DES-346,ZI 104,.dat

    Für die Table wirds dann gesplittet und .dat wird entfernt
    Der Inhalt einer Datei sieht zb. so aus:

    234234,
    Switch,
    Digitec,
    Cisco,
    DES-346,
    4,
    12.12.2012,
    05.01.2013,
    127.0.0.1,
    ZI 104,
    ,
    false,
    Metal-Schweiz wurde nun offiziell veröffentlich nach all den Jahren :)

    Hy,

    Ich habe hier eine Besispiel Klasse, na gut eigendlich 3 erstellt. Die macht genau das was du willst.

    Java-Quellcode

    1. public class Suche implements ActionListener {
    2. public JButton b;
    3. public static void main(String[] args)
    4. {
    5. JFrame f = new JFrame();
    6. f.setLayout(new BorderLayout());
    7. f.setVisible(true);
    8. Suche main = new Suche();
    9. main.initial(f);
    10. }
    11. public void initial(JFrame f)
    12. {
    13. b = new JButton("Ausgabe");
    14. b.addActionListener(this);
    15. f.add(b,BorderLayout.CENTER);
    16. }
    17. @Override
    18. public void actionPerformed(ActionEvent e) {
    19. // TODO Auto-generated method stub
    20. if(e.getSource()==b)
    21. {
    22. returnStruct s = getData();
    23. mask m = new mask();
    24. m.idTxt.setText(s.id);
    25. m.KdNrTxt.setText(s.Kundennummer);
    26. m.NameTxt.setText(s.KundenName);
    27. m.AnschriftTxt.setText(s.Anschrift);
    28. m.setVisible(true);
    29. System.out.println(s.id);
    30. System.out.println(s.Kundennummer);
    31. System.out.println(s.KundenName);
    32. System.out.println(s.Anschrift);
    33. }
    34. }
    35. public File getFile(String id)
    36. {
    37. File Ausgabe = null;
    38. // Dein Start Verzeichniss
    39. File Verzeichniss = new File("Dein Verzeichniss");
    40. // Der Verzeichniss Inhalt
    41. File[] f = Verzeichniss.listFiles();
    42. // Jede File ausgeben
    43. for(File c : f)
    44. {
    45. // Wenn es eine Datei ist
    46. if(c.isFile()==true)
    47. {
    48. // Beginnt die File mit der ID
    49. if(c.getName().startsWith(id))
    50. {
    51. // Ausgeben der Datei
    52. Ausgabe = c;
    53. }
    54. }
    55. }
    56. // Zzurückgeben deiner Datei
    57. return Ausgabe;
    58. }
    59. public returnStruct getData(File f)
    60. {
    61. FileReader stream;
    62. returnStruct struct = new returnStruct();
    63. try {
    64. stream = new FileReader(getFile("1234"));
    65. BufferedReader reader = new BufferedReader(stream);
    66. struct.id = reader.readLine();
    67. struct.Kundennummer = reader.readLine();
    68. struct.KundenName = reader.readLine();
    69. struct.Anschrift = reader.readLine();
    70. reader.close();
    71. } catch (FileNotFoundException e) {
    72. // TODO Auto-generated catch block
    73. e.printStackTrace();
    74. } catch (IOException e) {
    75. // TODO Auto-generated catch block
    76. e.printStackTrace();
    77. }
    78. return struct;
    79. }
    80. }
    81. class returnStruct {
    82. public String id;
    83. public String Kundennummer;
    84. public String Anschrift;
    85. public String KundenName;
    86. public String Ip;
    87. public String Datum;
    88. }
    89. class mask extends JDialog {
    90. public String id;
    91. public String KundenNr;
    92. public String Name;
    93. public String Anschrift;
    94. public JTextField idTxt;
    95. public JTextField KdNrTxt;
    96. public JTextField NameTxt;
    97. public JTextField AnschriftTxt;
    98. public static void main(String[] args)
    99. {
    100. mask m = new mask();
    101. m.setSize(512, 512);
    102. m.setTitle("Kunden Maske");
    103. m.setVisible(true);
    104. }
    105. public mask()
    106. {
    107. this.setLayout(new GridLayout(4,2));
    108. // Textfeld ID
    109. idTxt = new JTextField();
    110. this.add(new JLabel("ID:"));
    111. this.add(idTxt);
    112. // TextFeld Kunden Nummer
    113. KdNrTxt = new JTextField();
    114. this.add(new JLabel("Kunden Nummer:"));
    115. this.add(KdNrTxt);
    116. // Textfeld Name
    117. NameTxt = new JTextField();
    118. this.add(new JLabel("Kunden Name:"));
    119. this.add(NameTxt);
    120. // Anschrift
    121. AnschriftTxt = new JTextField();
    122. this.add(new JLabel("Anschrift:"));
    123. this.add(AnschriftTxt);
    124. }
    125. }
    Hmmm hab noch ne andere Frage, gibt es eine Möglichkeit beim Pfad setzen für den BufferedReader im Filenamen nur einen speziellen Teil zu überprüfen? Also zb.

    Quellcode

    1. BufferedReader auslesen = new BufferedReader(new FileReader("C:/Users/" + userName + "/AppData/Local/Networkadm/"+IDs+"dieser Teil hier soll irgendwas sein hauptsache die IDs stimmt")

    Ich krieg das da irgendwie nicht gebacken.
    Metal-Schweiz wurde nun offiziell veröffentlich nach all den Jahren :)

    Nein du musst eine Richtige Pfad angabe machen. In dem Beispiel das ich dir sende, wird in dem Teil

    Java-Quellcode

    1. BufferedReader auslesen = new BufferedReader(new FileReader(getData("id"))
    die Datei Gesucht, bzw. die Datei zurückgegeben die mit der ID Beginnt.