Ich nocheinmal 
Ich habe mein kleines Programm endlich fertig. Da es erst mein zweites richtiges ist (das erste war ein kleiner Mp3 Player Noise) ( und abgesehen von den kleinen Minisachen wie Benzinrechner und Stringzerschnipsel Billigdingern) würde ich mich freuen, wenn ein paar, die Ahnung haben mein Programm anschauen würden. Mir vielleicht Patzer und unsauberen Code zeigen und sagen, wie man es besser machen könnte.
Das Programm liest alle Dateien eines bestimmten Typs aus, dann kann man die Dateinamenerweiterung entweder in groß oder in klein umbenennen.
Dann noch eine kleine Frage am Rande: Seit ich NetBeans und das SDK auf meinen Rechner gehauen habe, kann ich keine *.jar-Dateien mehr ausführen! Ich klicke doppelt darauf, aber nichts tut sich ???:L
Aktionen bei den *.jar-Dateien:
Vorgang:
open
Anwendung für diesen Vorgang:
"E:\Programme\System & Security\Java\jre1.5.0_03\bin\javaw.exe" -jar "%1" %*
Anwendung:
javaw
Thema:
System
Danke
Ich habe mein kleines Programm endlich fertig. Da es erst mein zweites richtiges ist (das erste war ein kleiner Mp3 Player Noise) ( und abgesehen von den kleinen Minisachen wie Benzinrechner und Stringzerschnipsel Billigdingern) würde ich mich freuen, wenn ein paar, die Ahnung haben mein Programm anschauen würden. Mir vielleicht Patzer und unsauberen Code zeigen und sagen, wie man es besser machen könnte.
Das Programm liest alle Dateien eines bestimmten Typs aus, dann kann man die Dateinamenerweiterung entweder in groß oder in klein umbenennen.
Dann noch eine kleine Frage am Rande: Seit ich NetBeans und das SDK auf meinen Rechner gehauen habe, kann ich keine *.jar-Dateien mehr ausführen! Ich klicke doppelt darauf, aber nichts tut sich ???:L
Aktionen bei den *.jar-Dateien:
Vorgang:
open
Anwendung für diesen Vorgang:
"E:\Programme\System & Security\Java\jre1.5.0_03\bin\javaw.exe" -jar "%1" %*
Anwendung:
javaw
Thema:
System
Danke
Code:
/*
* Main.java
*
* Created on 30. April 2005, 17:58
*/
package extensiontool;
import javax.swing.*;
import java.io.*;
import java.util.*;
/**
*
* @author *****
*/
public class Main extends javax.swing.JFrame {
/** Creates new form Main */
public Main() {
initComponents();
}
public String ext;
public Vector vFiles, vDirectories, vFiles2;
/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
private void initComponents() {
buttonGroup1 = new javax.swing.ButtonGroup();
jTabbedPane1 = new javax.swing.JTabbedPane();
jPanel1 = new javax.swing.JPanel();
jRadioButton1 = new javax.swing.JRadioButton();
jRadioButton2 = new javax.swing.JRadioButton();
jLabel1 = new javax.swing.JLabel();
jLabel2 = new javax.swing.JLabel();
jTextField1 = new javax.swing.JTextField();
jButton1 = new javax.swing.JButton();
jLabel3 = new javax.swing.JLabel();
jTextField2 = new javax.swing.JTextField();
jButton2 = new javax.swing.JButton();
jCheckBox1 = new javax.swing.JCheckBox();
jCheckBox2 = new javax.swing.JCheckBox();
jPanel2 = new javax.swing.JPanel();
jLabel4 = new javax.swing.JLabel();
jScrollPane1 = new javax.swing.JScrollPane();
jList1 = new javax.swing.JList();
jPanel3 = new javax.swing.JPanel();
jLabel5 = new javax.swing.JLabel();
jScrollPane2 = new javax.swing.JScrollPane();
jList2 = new javax.swing.JList();
jMenuBar1 = new javax.swing.JMenuBar();
jMenu1 = new javax.swing.JMenu();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
jPanel1.setLayout(new org.netbeans.lib.awtextra.AbsoluteLayout());
buttonGroup1.add(jRadioButton1);
jRadioButton1.setSelected(true);
jRadioButton1.setText("lower case");
jPanel1.add(jRadioButton1, new org.netbeans.lib.awtextra.AbsoluteConstraints(20, 40, 90, -1));
buttonGroup1.add(jRadioButton2);
jRadioButton2.setText("upper case");
jPanel1.add(jRadioButton2, new org.netbeans.lib.awtextra.AbsoluteConstraints(20, 60, 90, -1));
jLabel1.setText("Rename extension to:");
jPanel1.add(jLabel1, new org.netbeans.lib.awtextra.AbsoluteConstraints(10, 20, -1, -1));
jLabel2.setText("Choose directory:");
jPanel1.add(jLabel2, new org.netbeans.lib.awtextra.AbsoluteConstraints(10, 100, -1, -1));
jTextField1.setEditable(false);
jPanel1.add(jTextField1, new org.netbeans.lib.awtextra.AbsoluteConstraints(23, 120, 150, -1));
jButton1.setText("Directory");
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton1ActionPerformed(evt);
}
});
jPanel1.add(jButton1, new org.netbeans.lib.awtextra.AbsoluteConstraints(190, 120, -1, 20));
jLabel3.setText("Choose extension:");
jPanel1.add(jLabel3, new org.netbeans.lib.awtextra.AbsoluteConstraints(10, 180, -1, -1));
jTextField2.setText("mp3");
jTextField2.setToolTipText("Choose an extension (case insensitive)");
jTextField2.addKeyListener(new java.awt.event.KeyAdapter() {
public void keyPressed(java.awt.event.KeyEvent evt) {
jTextField2KeyPressed(evt);
}
public void keyReleased(java.awt.event.KeyEvent evt) {
jTextField2KeyReleased(evt);
}
public void keyTyped(java.awt.event.KeyEvent evt) {
jTextField2KeyTyped(evt);
}
});
jPanel1.add(jTextField2, new org.netbeans.lib.awtextra.AbsoluteConstraints(23, 200, 50, -1));
jButton2.setText("GO");
jButton2.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton2ActionPerformed(evt);
}
});
jPanel1.add(jButton2, new org.netbeans.lib.awtextra.AbsoluteConstraints(100, 230, 100, -1));
jCheckBox1.setText("Rename all");
jCheckBox1.addItemListener(new java.awt.event.ItemListener() {
public void itemStateChanged(java.awt.event.ItemEvent evt) {
jCheckBox1ItemStateChanged(evt);
}
});
jPanel1.add(jCheckBox1, new org.netbeans.lib.awtextra.AbsoluteConstraints(90, 200, -1, -1));
jCheckBox2.setText("Include subdirectories");
jCheckBox2.addItemListener(new java.awt.event.ItemListener() {
public void itemStateChanged(java.awt.event.ItemEvent evt) {
jCheckBox2ItemStateChanged(evt);
}
});
jPanel1.add(jCheckBox2, new org.netbeans.lib.awtextra.AbsoluteConstraints(20, 140, -1, -1));
jTabbedPane1.addTab("ULC", jPanel1);
jPanel2.setLayout(new java.awt.BorderLayout());
jLabel4.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
jLabel4.setText("0 directories selected");
jPanel2.add(jLabel4, java.awt.BorderLayout.NORTH);
jScrollPane1.setBorder(null);
jScrollPane1.setViewportView(jList1);
jPanel2.add(jScrollPane1, java.awt.BorderLayout.CENTER);
jTabbedPane1.addTab("Directories", jPanel2);
jPanel3.setLayout(new java.awt.BorderLayout());
jLabel5.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
jLabel5.setText("0 files selected");
jPanel3.add(jLabel5, java.awt.BorderLayout.NORTH);
jScrollPane2.setBorder(null);
jScrollPane2.setViewportView(jList2);
jPanel3.add(jScrollPane2, java.awt.BorderLayout.CENTER);
jTabbedPane1.addTab("Files", jPanel3);
getContentPane().add(jTabbedPane1, java.awt.BorderLayout.CENTER);
jMenu1.setText("Menu");
jMenuBar1.add(jMenu1);
setJMenuBar(jMenuBar1);
java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
setBounds((screenSize.width-300)/2, (screenSize.height-353)/2, 300, 353);
}
private void jTextField2KeyPressed(java.awt.event.KeyEvent evt) {
if(jTextField2.getText().length() > 3)
jTextField2.setText(jTextField2.getText().substring(0,3));
}
private void jTextField2KeyReleased(java.awt.event.KeyEvent evt) {
if(jTextField2.getText().length() > 3)
jTextField2.setText(jTextField2.getText().substring(0,3));
}
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
/** Umbenennen **/
for(int i = 0; i < vFiles2.size(); i++) {
String fileOld, fileNew, fileExt;
fileOld = String.valueOf(vFiles2.get(i));
fileExt = fileOld.substring(fileOld.length() - 3);
fileNew = fileOld.substring(0, fileOld.length() - 3);
if(jRadioButton1.isSelected()) // Kleinschreibung
fileExt = fileExt.toLowerCase();
else
fileExt = fileExt.toUpperCase();
fileNew = fileNew + fileExt;
File f = new File(fileOld);
f.renameTo(new File(fileNew));
}
refreshAll(new File(jTextField1.getText()));
}
private void jTextField2KeyTyped(java.awt.event.KeyEvent evt) {
/** Wenn die erweiterung geändert wird,
* müssen die Dateien geändert werden.
*/
if(jTextField2.getText().length() > 3)
jTextField2.setText(jTextField2.getText().substring(0,3));
try {
ext = jTextField2.getText();
refreshAll(new File(jTextField1.getText()));
} catch(NullPointerException e){} // TODO add your handling code here:
}
private void jCheckBox2ItemStateChanged(java.awt.event.ItemEvent evt) {
try {
refreshAll(new File(jTextField1.getText()));
} catch(NullPointerException e){}
}
private void jCheckBox1ItemStateChanged(java.awt.event.ItemEvent evt) {
/** Hier wird das Textfeld für die Dateinamenerweiterung deaktiviert,
* wenn die Checkbox 'all' aktiviert wird.
* Natürlich wird es auch andersrum funktionieren!
*/
if(jCheckBox1.isSelected()){
jTextField2.setEnabled(false);
ext = "";
}else{
jTextField2.setEnabled(true);
ext = jTextField2.getText();
}
try {
refreshAll(new File(jTextField1.getText()));
} catch(NullPointerException e){}
}
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
/** Variablendeklaration **/
if(jCheckBox1.isSelected())
ext = "";
else
ext = jTextField2.getText().trim();
FileFilter ff = new FileFilter(); // Erstelle einen FileFilter für Verzeichnisse (siehe unten)
FilenameFilter fnf = new FilenameFilter(); // Erstelle einen FilenameFilter für Dateien (siehe unten)
/** Wenn der Directory Button geklickt wird,
* öffnet sich ein "Choose a directory ..." Dialog.
* Es werden nur Ordner angezeigt, keine Dateien und
* es kann nur ein Ordner gewählt werden.
*/
JFileChooser directoryChooser = new JFileChooser();
directoryChooser.setAcceptAllFileFilterUsed(false);
directoryChooser.setDialogTitle("Choose a directory ...");
directoryChooser.setFileSelectionMode(directoryChooser.DIRECTORIES_ONLY);
directoryChooser.showOpenDialog(this);
/** Folgende Zeilen dürfen nur aufgerufen werden,
* wenn ein Verzeichnis gewählt ist!
*/
if(directoryChooser.getSelectedFile() != null){
File wDir = new File(String.valueOf(directoryChooser.getSelectedFile())); // Speichere Stammverzeichnis in wDir
refreshAll(wDir);
}
}
public void refreshAll(File wDir) {
FileFilter ff = new FileFilter(); // Erstelle einen FileFilter für Verzeichnisse (siehe unten)
FilenameFilter fnf = new FilenameFilter(); // Erstelle einen FilenameFilter für Dateien (siehe unten)
jTextField1.setText(String.valueOf(wDir)); // Schreibt Pfad in jTextField1
/** Hier muss überprüft werden, ob "Include subdirectories"
* aktiviert ist
*/
if(jCheckBox2.isSelected()) {
/** Erstelle einen Vector, gefüllt mit alles Unterverzeichnissen
* und speichere ihn in das Array sDirectories[].
* Danach gib es in der Directory Liste aus.
*/
Vector vDirectories = new Vector(10); // Absolute Pfade
Vector vFiles = new Vector(10); // Absolute Dateinamen
getRecursive(new File(String.valueOf(wDir)), vDirectories, ff); // Hole Pfade
vDirectories.add(0, wDir.getPath()); // Hole Stammverzeichnis
getRecursive(new File(wDir.getPath()), vFiles, fnf);
/** Gib Dateien und Verzeichnisse in JList aus */
setDirectoryList(vDirectories);
setFilesList(vFiles);
} else {
/** Hier brauchen nur die Entsprechenden
* Dateien ausgewählt zu werden. Deshalb
* wird hier auch nur das Stammverzeichnis gebraucht.
* Danach gib alle Dateien in der Files Liste aus.
*/
vDirectories = new Vector(1); // Absolute Pfade
vFiles = new Vector(10); // Absolute Dateinamen
vDirectories.add(0, wDir.getPath());
for(int i = 0;i < wDir.listFiles(fnf).length;i++) // Lese alle Dateien aus dem Stammverzeichnis aus
if(wDir.listFiles(fnf)[i].isFile() && String.valueOf(wDir.listFiles(fnf)[i]).toLowerCase().endsWith(ext.toLowerCase()))
vFiles.add(wDir.listFiles(fnf)[i].getPath()); // Und speichere nur die, die die richtige Dateiendung haben in einen Vector
/** Gib Dateien und Verzeichnisse in JList aus */
setDirectoryList(vDirectories);
setFilesList(vFiles);
}
}
/** Das ist der FileFilter, der nur
* Verzeichnisse herausfiltert.
*/
private class FileFilter implements java.io.FileFilter {
public boolean accept(File f) {
return f.isDirectory();
}
}
/** Das ist der FilenameFilter, der nur
* Dateien herausfiltert, die der Dateiendung
* in JTextfield1 entsprechen. Aber auch
* Verzeichnisse, damit die Rekursive Methode
* getRecursive(File basedir, Vector files, FilenameFilter fnf)
* funktioniert.
*/
private class FilenameFilter implements java.io.FilenameFilter {
public boolean accept(File dir, String file) {
return file.toLowerCase().endsWith(ext.toLowerCase()) || file.toLowerCase().endsWith("")/* new File(dir.getPath()+file).isDirectory() */;
}
}
/** Rekursive Methode um mit Hilfe
* des FileFilters Dateien herauszufiltern.
* Inklusive Unterverzeichnissen!
*/
public void getRecursive(File basedir, Vector dirs, FileFilter ff) {
File[] f = basedir.listFiles(ff);
for(int i = 0; i < f.length; i++) {
dirs.add(f[i]);
if(f[i].isDirectory()) {
getRecursive(f[i], dirs, ff);
}
}
}
public void getRecursive(File basedir, Vector files, FilenameFilter fnf) {
File[] f = basedir.listFiles(fnf);
for(int i = 0; i < f.length; i++) {
if(f[i].isFile() && String.valueOf(f[i]).toLowerCase().endsWith(ext.toLowerCase())) files.add(f[i]);
if(f[i].isDirectory()) {
getRecursive(f[i], files, fnf);
}
}
}
private void setDirectoryList(Vector dir) {
jList1.setListData(dir);
if(dir.size() == 1)
jLabel4.setText(dir.size() + " directory selected");
else
jLabel4.setText(dir.size() + " directories selected");
}
private void setFilesList(Vector files) {
jList2.setListData(files);
vFiles2 = files;
if(files.size() == 1)
jLabel5.setText(files.size() + " file selected");
else
jLabel5.setText(files.size() + " files selected");
}
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new Main().setVisible(true);
}
});
}
// Variables declaration - do not modify
private javax.swing.ButtonGroup buttonGroup1;
private javax.swing.JButton jButton1;
private javax.swing.JButton jButton2;
private javax.swing.JCheckBox jCheckBox1;
private javax.swing.JCheckBox jCheckBox2;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel3;
private javax.swing.JLabel jLabel4;
private javax.swing.JLabel jLabel5;
private javax.swing.JList jList1;
private javax.swing.JList jList2;
private javax.swing.JMenu jMenu1;
private javax.swing.JMenuBar jMenuBar1;
private javax.swing.JPanel jPanel1;
private javax.swing.JPanel jPanel2;
private javax.swing.JPanel jPanel3;
private javax.swing.JRadioButton jRadioButton1;
private javax.swing.JRadioButton jRadioButton2;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JScrollPane jScrollPane2;
private javax.swing.JTabbedPane jTabbedPane1;
private javax.swing.JTextField jTextField1;
private javax.swing.JTextField jTextField2;
// End of variables declaration
}
Zuletzt bearbeitet von einem Moderator: