AWT Ich verstehe die Fehlermeldung nicht. Was habe ich falsch gemacht?

redacted

Aktives Mitglied
Hey.

Möchte, dass mein Programm aus einem Array heraus, jeden String in eine .txt Datei reinpastet. Leider kriege ich da andauernd die komischsten Fehlermeldungen und verstehe nicht, wie sich das fixen lässt. Hilfe bitte!

Mein Code:
Java:
package de.brain.java;


import java.awt.AWTException;
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.datatransfer.*;
import java.awt.datatransfer.StringSelection;
import java.awt.event.KeyEvent;
import java.io.IOException;

public class CoreOfBrain {      

public static int random()
    {
        int d=(int) ((Math.random()*1000)%101);
        System.out.println(d);
        return d;
    }  

public static void main(String[] args) throws AWTException
    {
    try
        {
            Runtime.getRuntime().exec("notepad");
            String[] lel = new String[96];
            lel[0] = "a";
            lel[1] = "b";
            lel[2] = "c";
            lel[3] = "d";
            lel[4] = "e";
            lel[5] = "f";
            lel[6] = "g";
            lel[7] = "h";
            lel[8] = "i";
            lel[9] = "j";
            lel[10] = "k";
            lel[11] = "l";
            lel[12] = "m";
            lel[13] = "n";
            lel[14] = "o";
            lel[15] = "p";
            lel[16] = "q";
            lel[17] = "r";
            lel[18] = "s";
            lel[19] = "t";
            lel[20] = "u";
            lel[21] = "v";
            lel[22] = "w";
            lel[23] = "x";
            lel[24] = "y";
            lel[25] = "z";
            lel[26] = "A";
            lel[27] = "B";
            lel[28] = "C";
            lel[29] = "D";
            lel[30] = "E";
            lel[31] = "F";
            lel[32] = "G";
            lel[33] = "H";
            lel[34] = "I";
            lel[35] = "J";
            lel[36] = "K";
            lel[37] = "L";
            lel[38] = "M";
            lel[39] = "N";
            lel[40] = "O";
            lel[41] = "P";
            lel[42] = "Q";
            lel[43] = "R";
            lel[44] = "S";
            lel[45] = "T";
            lel[46] = "U";
            lel[47] = "V";
            lel[48] = "W";
            lel[49] = "X";
            lel[50] = "Y";
            lel[51] = "Z";
            lel[52] = "ü";
            lel[53] = "Ü";
            lel[54] = "ö";
            lel[55] = "Ö";
            lel[56] = "ä";
            lel[57] = "Ä";
            lel[58] = "@";
            lel[59] = "€";
            lel[60] = " ";
            lel[61] = "|";
            lel[62] = "<";
            lel[63] = ">";
            lel[64] = "~";
            lel[65] = "*";
            lel[66] = "+";
            lel[67] = "'";
            lel[68] = "#";
            lel[69] = ".";
            lel[70] = ":";
            lel[71] = "] =";
            lel[72] = ";";
            lel[73] = "_";
            lel[74] = "-";
            lel[75] = "\\";
            lel[76] = "{";
            lel[77] = "[";
            lel[78] = "] =";
            lel[79] = "}";
            lel[80] = "ß";
            lel[81] = "?";
            lel[82] = "(";
            lel[83] = ")";
            lel[84] = "/";
            lel[85] = "&";
            lel[86] = "%";
            lel[87] = "=";
            lel[88] = "$";
            lel[89] = "§";
            lel[90] = "\"";
            lel[91] = "!";
            lel[92] = "";
            lel[93] = "µ";
            lel[94] = "^";
            lel[95] = "°";
            for(int i = 95; i>0;i--){  
                /*
                ArrayList<String> lel = new ArrayList<String>();
                lel.set(0, "a");
                lel.set(1, "b");
                lel.set(2, "c");
                lel.set(3, "d");
                lel.set(4, "e");
                lel.set(5, "f");
                lel.set(6, "g");
                lel.set(7, "h");
                lel.set(8, "i");
                lel.set(9, "j");
                lel.set(10, "k");
                lel.set(11, "l");
                lel.set(12, "m");
                lel.set(13, "n");
                lel.set(14, "o");
                lel.set(15, "p");
                lel.set(16, "q");
                lel.set(17, "r");
                lel.set(18, "s");
                lel.set(19, "t");
                lel.set(20, "u");
                lel.set(21, "v");
                lel.set(22, "w");
                lel.set(23, "x");
                lel.set(24, "y");
                lel.set(25, "z");
                lel.set(26, "A");
                lel.set(27, "B");
                lel.set(28, "C");
                lel.set(29, "D");
                lel.set(30, "E");
                lel.set(31, "F");
                lel.set(32, "G");
                lel.set(33, "H");
                lel.set(34, "I");
                lel.set(35, "J");
                lel.set(36, "K");
                lel.set(37, "L");
                lel.set(38, "M");
                lel.set(39, "N");
                lel.set(40, "O");
                lel.set(41, "P");
                lel.set(42, "Q");
                lel.set(43, "R");
                lel.set(44, "S");
                lel.set(45, "T");
                lel.set(46, "U");
                lel.set(47, "V");
                lel.set(48, "W");
                lel.set(49, "X");
                lel.set(50, "Y");
                lel.set(51, "Z");
                lel.set(52, "ü");
                lel.set(53, "Ü");
                lel.set(54, "ö");
                lel.set(55, "Ö");
                lel.set(56, "ä");
                lel.set(57, "Ä");
                lel.set(58, "@");
                lel.set(59, "€");
                lel.set(60, " ");
                lel.set(61, "|");
                lel.set(62, "<");
                lel.set(63, ">");
                lel.set(64, "~");
                lel.set(65, "*");
                lel.set(66, "+");
                lel.set(67, "'");
                lel.set(68, "#");
                lel.set(69, ".");
                lel.set(70, ":");
                lel.set(71, ",");
                lel.set(72, ";");
                lel.set(73, "_");
                lel.set(74, "-");
                lel.set(75, "\\");
                lel.set(76, "{");
                lel.set(77, "[");
                lel.set(78, "]");
                lel.set(79, "}");
                lel.set(80, "ß");
                lel.set(81, "?");
                lel.set(82, "(");
                lel.set(83, ")");
                lel.set(84, "/");
                lel.set(85, "&");
                lel.set(86, "%");
                lel.set(87, "=");
                lel.set(88, "$");
                lel.set(89, "§");
                lel.set(90, "\"");
                lel.set(91, "!");
                lel.set(92, "");
                lel.set(93, "µ");
                lel.set(94, "^");
                lel.set(95, "@");
                */
              

              
            StringSelection string = new StringSelection(lel[i]);
            Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
            clipboard.setContents(string, string);

            Robot robot = new Robot();
      
        synchronized (robot)
            {  
            robot.keyPress(KeyEvent.VK_CONTROL);
            robot.keyPress(KeyEvent.VK_V);
            }
        synchronized (robot)
            {
            robot.keyRelease(KeyEvent.VK_V);
            robot.keyRelease(KeyEvent.VK_CONTROL);
            }
        }
        }
    catch (IOException e)
        {
            e.printStackTrace();
            System.err.println("Caught IOException: " +  e.getMessage());
        }
          
            random();
    }  
}

und hier die Fehlermeldung von Eclipse:
at sun.awt.windows.WClipboard.setContentsNative(Unknown Source)
at sun.awt.datatransfer.SunClipboard.setContents(Unknown Source)
at de.brain.java.CoreOfBrain.main(CoreOfBrain.java:229)

Das Program läuft, bis es das " reinpasten soll. Dann schmiert es mit der oberen Fehlermeldung ab.

Kann mir bitte jemand helfen. Ich suche jetzt schon seit einem halben Monat nach der Lösung dieses kleinen Hindernisses. 🙁
 
Hast du hier schon mal geschaut? (inkl weiterführenden Link).
Gibts Gründe dafür, dass du etwas in die Datei reinkopieren willst? Warum nicht einfach in eine Datei schreiben?
 
und hier die Fehlermeldung von Eclipse:
at sun.awt.windows.WClipboard.setContentsNative(Unknown Source)
at sun.awt.datatransfer.SunClipboard.setContents(Unknown Source)
at de.brain.java.CoreOfBrain.main(CoreOfBrain.java:229)

Das Program läuft, bis es das " reinpasten soll. Dann schmiert es mit der oberen Fehlermeldung ab.
Das ist übrigens nur ein Teil der Fehlermeldung (der Stacktrace, der angibt wo der Fehler liegt).
Der relevante Teil, der darüber steht (welche Exception auftrat), fehlt 😉
 
Uuups habs nochmal die komplette Fehlermeldung kopiert hier:

Exception in thread "main" java.lang.IllegalStateException: cannot open system clipboard
at sun.awt.windows.WClipboard.openClipboard(Native Method)
at sun.awt.windows.WClipboard.setContentsNative(Unknown Source)
at sun.awt.datatransfer.SunClipboard.setContents(Unknown Source)
at de.brain.java.CoreOfBrain.main(CoreOfBrain.java:229)

Das habe ich mal überflogen. Auf den ersten Blick hab ich da jetzt nichts gefunden, was helfen könnte, da das Problem ja einen anderen Kontext mit gleicher Fehlermeldung aufweist... und ja es gibt einen Grund, die Datei nicht selbst zu schreiben. Sobald das Copy und Paste funktioniert, werde ich mich darum kümmern, dass alle Zeichen des Arrays, in jeder möglichen Folgen hintereinander gepastet werden(bis zu einer länge von 200). Das wären dann in Zeilenanzahl die Fakultät von 200 wenn ich da gerade nichts verwechsle. Das zu schreiben würde Jahre dauern 🙁 . Leider habe ich nicht die Geduld dafür und lass das lieber ein Programm an einem Tag machen 😀.
 
und ja es gibt einen Grund, die Datei nicht selbst zu schreiben. Sobald das Copy und Paste funktioniert, werde ich mich darum kümmern, dass alle Zeichen des Arrays, in jeder möglichen Folgen hintereinander gepastet werden(bis zu einer länge von 200). Das wären dann in Zeilenanzahl die Fakultät von 200 wenn ich da gerade nichts verwechsle. Das zu schreiben würde Jahre dauern 🙁 . Leider habe ich nicht die Geduld dafür und lass das lieber ein Programm an einem Tag machen 😀.
Und wie sollte das mit C&P leichter umzusetzen sein, als mit direkt in die Datei schreiben? 😵
 
Und wie sollte das mit C&P leichter umzusetzen sein, als mit direkt in die Datei schreiben? 😵
weil es dann ein automatisierter Prozess ist. Ich meine ja nur...das Array ist 95 Zeichen lang. Jedes Zeichen einmal in eine Zeile jeweils zu schreiben, bis man Zeilen mit einer Länge von 1-200 Zeichen hat, die jede mögliche Kombination der Zeichen abdecken...das manuell zu machen dauert halt ewig. Der Web-Taschenrechner hat nichtmal genügend kapazität, um die Länge der Zahl anzuzeigen, die der Zeilen der txt Datei gleichsein wird.
 
Es geht einfach darum das man auch mit einem Java-Programm in eine Datei schreiben kann .. dazu muss man nicht die Robot-Klasse (bspw C&P - Funktion) missbrauchen.
Das wäre a) der übliche Weg und b) würde es dir die ganzen Fehler ersparen.

Java:
StringBuilder letterString = new StringBuilder();
for(char i = 'a'; i <= 'z'; i++){
    letterString.append(i);
    letterString.append((char)(i-32));
}
letterString.append("üÜöÖäÄ@€ |<>~*+'#.:]}ß?()/&%=$§\"!^°µ");

File destFile = new File("foo.txt");
Files.write(destFile.toPath(), letterString.toString().getBytes());
 
... und was den Fehler angeht. Dein Transferable string-Objekt ist kein passender Clipboard-Owner - fallst du wirklich den Umweg über das Clipboard gehen willst.
 
Es geht einfach darum das man auch mit einem Java-Programm in eine Datei schreiben kann .. dazu muss man nicht die Robot-Klasse (bspw C&P - Funktion) missbrauchen.
Das wäre a) der übliche Weg und b) würde es dir die ganzen Fehler ersparen.

Java:
StringBuilder letterString = new StringBuilder();
for(char i = 'a'; i <= 'z'; i++){
    letterString.append(i);
    letterString.append((char)(i-32));
}
letterString.append("üÜöÖäÄ@€ |<>~*+'#.:]}ß?()/&%=$§\"!^°µ");

File destFile = new File("foo.txt");
Files.write(destFile.toPath(), letterString.toString().getBytes());
Ahhh cool danke. Nein ich gehe gerne den üblichen weg. Ist mein erstes mal mit AWT, deshalb kenne ich halt übliche Methoden nicht. Sicher, dass der die for Schleife als a-z abarbeitet? funktioniert das dann auch mit Großbuchstaben? Oder ist
letterString.append((char)(i-32));
der ASCII Code für die Großbuchstaben?

Und ich dachte schon das läge daran, dass andere Programme im Hintergrund auf das Clipboard zugreifen und dadurch der Owner nicht mehr beim Programm liegen würde oder so....dankedankedanke für den Post 🙂
 
Z.B. so
Java:
    private ClipboardOwner thisIsAClipBoardOwner = new ClipboardOwner() {
        @Override
        public void lostOwnership(Clipboard clipboard, Transferable contents) {
            System.out.println("Dang, I lost ownership of the clipboard");
        }
    };
 
Sicher, dass der die for Schleife als a-z abarbeitet? funktioniert das dann auch mit Großbuchstaben? Oder ist der ASCII Code für die Großbuchstaben?
Zu ersten Frage: Probier die Schleife einfach mal aus. Hier wird der Umstand genutzt, dass es sich bei einem char im Grunde nur um einen Zahlenwert handelt.
Deshalb funktioniert 'a' bis 'z' so wie 97 bis 122
Zu Frage 2
'a' hat den Wert 97
'A' hat den Wert 65
 
Code:
package de.brain.java;


import java.awt.AWTException;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.nio.file.Files;

public class CoreOfBrain {       

public static int random()
    {
        int d=(int) ((Math.random()*1000)%101);
        System.out.println(d);
        return d;
    }   

private static final String FILENAME = "C://Users//Cornelius//Desktop//writepossibilities.txt";
public static int g =0;
   

       

public static void main(String[] args) throws AWTException
    {
   
   
    BufferedWriter bw1 = null;
    FileWriter fw1 = null;

    try {
        File file = new File(FILENAME);
        if(file.createNewFile())
        {
            System.out.println("Success!");
        }else{
            file.delete();
            file.createNewFile();
            System.out.println("The File has been deleted and a new one was created!");
        }
        //Runtime.getRuntime().exec("notepad");
        char[] carray = new char[96];
       
        for (char i ='a'; i <='z'; i++){
            int o= 0;
            carray[o] = i;
            o++;
            carray[o] = (char) (i-32) ;
            o++;
        }
       
        StringBuilder a = new StringBuilder();
        a.append("üÜöÖäÄ@€ |<>~*+'#.:]}ß?()/&%=$§\"!^°µ");
       
        for (int h=a.length();h<=0;h--){
           
        carray[96-h] = a.charAt(g);
        g++;       
        }
       
       
        StringBuilder letterString = new StringBuilder();
       
        for(char i= 'a'; i <= 'z'; i++){
            letterString.append(i);
            letterString.append((char)(i-32));
        }
        letterString.append("üÜöÖäÄ@€ |<>~*+'#.:]}ß?()/&%=$§\"!^°µ");
       
       
       
        for (int i = carray.length; i<=0; i--)    {
       
            FileOutputStream fos = new FileOutputStream(FILENAME);
            fos.write(carray[i]);
            fos.flush();
            fos.close();
           
           
           
           
        fw1 = new FileWriter(file);
        bw1 = new BufferedWriter(fw1);

        bw1.write(carray[i]);
       
                }
        System.out.println("Done!");
           
    } catch (IOException e) {

        e.printStackTrace();

    } finally {

        try {

            if (bw1 != null)
                bw1.close();

            if (fw1 != null)
                fw1.close();

           
            } catch (IOException ex) {

            ex.printStackTrace();

            }

        }
   
    }

}



   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
    //try
        //{
            /*Runtime.getRuntime().exec("notepad");
            String[] lel = new String[96];
            lel[0] = "a";
            lel[1] = "b";
            lel[2] = "c";
            lel[3] = "d";
            lel[4] = "e";
            lel[5] = "f";
            lel[6] = "g";
            lel[7] = "h";
            lel[8] = "i";
            lel[9] = "j";
            lel[10] = "k";
            lel[11] = "l";
            lel[12] = "m";
            lel[13] = "n";
            lel[14] = "o";
            lel[15] = "p";
            lel[16] = "q";
            lel[17] = "r";
            lel[18] = "s";
            lel[19] = "t";
            lel[20] = "u";
            lel[21] = "v";
            lel[22] = "w";
            lel[23] = "x";
            lel[24] = "y";
            lel[25] = "z";
            lel[26] = "A";
            lel[27] = "B";
            lel[28] = "C";
            lel[29] = "D";
            lel[30] = "E";
            lel[31] = "F";
            lel[32] = "G";
            lel[33] = "H";
            lel[34] = "I";
            lel[35] = "J";
            lel[36] = "K";
            lel[37] = "L";
            lel[38] = "M";
            lel[39] = "N";
            lel[40] = "O";
            lel[41] = "P";
            lel[42] = "Q";
            lel[43] = "R";
            lel[44] = "S";
            lel[45] = "T";
            lel[46] = "U";
            lel[47] = "V";
            lel[48] = "W";
            lel[49] = "X";
            lel[50] = "Y";
            lel[51] = "Z";
            lel[52] = "ü";
            lel[53] = "Ü";
            lel[54] = "ö";
            lel[55] = "Ö";
            lel[56] = "ä";
            lel[57] = "Ä";
            lel[58] = "@";
            lel[59] = "€";
            lel[60] = " ";
            lel[61] = "|";
            lel[62] = "<";
            lel[63] = ">";
            lel[64] = "~";
            lel[65] = "*";
            lel[66] = "+";
            lel[67] = "'";
            lel[68] = "#";
            lel[69] = ".";
            lel[70] = ":";
            lel[71] = "] =";
            lel[72] = ";";
            lel[73] = "_";
            lel[74] = "-";
            lel[75] = "\\";
            lel[76] = "{";
            lel[77] = "[";
            lel[78] = "] =";
            lel[79] = "}";
            lel[80] = "ß";
            lel[81] = "?";
            lel[82] = "(";
            lel[83] = ")";
            lel[84] = "/";
            lel[85] = "&";
            lel[86] = "%";
            lel[87] = "=";
            lel[88] = "$";
            lel[89] = "§";
            lel[90] = "\"";
            lel[91] = "!";
            lel[92] = "";
            lel[93] = "µ";
            lel[94] = "^";
            lel[95] = "°"; */
            //for(int i = 95; i>0;i--){   
                /*
                ArrayList<String> lel = new ArrayList<String>();
                lel.set(0, "a");
                lel.set(1, "b");
                lel.set(2, "c");
                lel.set(3, "d");
                lel.set(4, "e");
                lel.set(5, "f");
                lel.set(6, "g");
                lel.set(7, "h");
                lel.set(8, "i");
                lel.set(9, "j");
                lel.set(10, "k");
                lel.set(11, "l");
                lel.set(12, "m");
                lel.set(13, "n");
                lel.set(14, "o");
                lel.set(15, "p");
                lel.set(16, "q");
                lel.set(17, "r");
                lel.set(18, "s");
                lel.set(19, "t");
                lel.set(20, "u");
                lel.set(21, "v");
                lel.set(22, "w");
                lel.set(23, "x");
                lel.set(24, "y");
                lel.set(25, "z");
                lel.set(26, "A");
                lel.set(27, "B");
                lel.set(28, "C");
                lel.set(29, "D");
                lel.set(30, "E");
                lel.set(31, "F");
                lel.set(32, "G");
                lel.set(33, "H");
                lel.set(34, "I");
                lel.set(35, "J");
                lel.set(36, "K");
                lel.set(37, "L");
                lel.set(38, "M");
                lel.set(39, "N");
                lel.set(40, "O");
                lel.set(41, "P");
                lel.set(42, "Q");
                lel.set(43, "R");
                lel.set(44, "S");
                lel.set(45, "T");
                lel.set(46, "U");
                lel.set(47, "V");
                lel.set(48, "W");
                lel.set(49, "X");
                lel.set(50, "Y");
                lel.set(51, "Z");
                lel.set(52, "ü");
                lel.set(53, "Ü");
                lel.set(54, "ö");
                lel.set(55, "Ö");
                lel.set(56, "ä");
                lel.set(57, "Ä");
                lel.set(58, "@");
                lel.set(59, "€");
                lel.set(60, " ");
                lel.set(61, "|");
                lel.set(62, "<");
                lel.set(63, ">");
                lel.set(64, "~");
                lel.set(65, "*");
                lel.set(66, "+");
                lel.set(67, "'");
                lel.set(68, "#");
                lel.set(69, ".");
                lel.set(70, ":");
                lel.set(71, ",");
                lel.set(72, ";");
                lel.set(73, "_");
                lel.set(74, "-");
                lel.set(75, "\\");
                lel.set(76, "{");
                lel.set(77, "[");
                lel.set(78, "]");
                lel.set(79, "}");
                lel.set(80, "ß");
                lel.set(81, "?");
                lel.set(82, "(");
                lel.set(83, ")");
                lel.set(84, "/");
                lel.set(85, "&");
                lel.set(86, "%");
                lel.set(87, "=");
                lel.set(88, "$");
                lel.set(89, "§");
                lel.set(90, "\"");
                lel.set(91, "!");
                lel.set(92, "");
                lel.set(93, "µ");
                lel.set(94, "^");
                lel.set(95, "@");
                */
               
               
               
            /*StringSelection string = new StringSelection(lel[i]);
            Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
            if(string.lostOwnership(string, string)){
            clipboard.setContents(string, string);

            Robot robot = new Robot();
       
        synchronized (robot)
            {   
            robot.keyPress(KeyEvent.VK_CONTROL);
            robot.keyPress(KeyEvent.VK_V);
            }
        synchronized (robot)
            {
            robot.keyRelease(KeyEvent.VK_V);
            robot.keyRelease(KeyEvent.VK_CONTROL);
            }
        }
                StringBuilder letterString = new StringBuilder();
                for(char i= 'a'; i <= 'z'; i++){
                    letterString.append(i);
                    letterString.append((char)(i-32));
                }
                letterString.append("üÜöÖäÄ@€ |<>~*+'#.:]}ß?()/&%=$§\"!^°µ");
               
               
                File neu = new File("unnamed");
               
               
                FileWriter fw = new FileWriter("unnamed.txt");
                BufferedWriter bw = new BufferedWriter(fw);
               
                bw.write("a");
               
                bw.close();
               
               
                /*File destFile = new File("unnamed.txt");
                Files.write(destFile.toPath(), letterString.toString().getBytes());
               
        }   
    catch (IOException e)
        {
            e.printStackTrace();
            System.err.println("Caught IOException: " +  e.getMessage());
        }
           
            random();
    }   
}*/
Hab es nochmal überarbeitet. Bekomme jetzt keine Fehlermeldungen mehr und mit dem char array carray sowie StringBuilder letterString wird nichts in die Datei geschrieben. Wenn ich einzelne chars aufrufe schreibt der sie rein, ich verstehe nur nicht warum das nicht mit/in der for schleife funktioniert 🙁
 
Den FILENAME solltest du in jedem Fall anpassen, einfach nur '/' als Trenner ist das passende.

Guck dir mal deinen Schleifenkopf an, vielleicht fällt es dir auf: for (int i = carray.length; i<=0; i--)
 
gibt carray.length nur die länge eines bestandteils von carray wieder? Anonsten wäre mir jetzt nichts aufgefallen...

Ich probiere es mal mit

Java:
for (int i=96;i<=0;i--)
 
Hmm irgendwie wird die Schleife einfach übersprungen, wenn nicht kommt ne IndexOutOfBoundsExeption (der iteriert(richtiges Wort?) weiter als es carray erlaubt, da es auf 96 Einträge beschränkt ist. Zudem lässt sich die Methode .toChar oder .charAt nicht auf den stringBuilder a anwenden um es auf carray zu übertragen 🙁)
 
Wie sieht denn dein Code jetzt aus?
Grob geraten hast du ein Array mit 96 Einträgen.. Da laufen die Indizes von 0...95
Und doch, auch der StringBuilder sollte eine charAt(int) Methode besitzen
 
Übersehe ich was, oder warum nimmst Du überhaupt einen StringBuilder her?

Java:
char[] a = "üÜöÖäÄ@€ |<>~*+'#.:]}ß?()/&%=$§\"!^°µ".toCharArray();
for (int h = a.length; h > 0; h--) {
    carray[96 - h] = a[g];
    g++;
}
 
Zuletzt bearbeitet:
Hm, das ding ist, dass der FileWriter irgendwie nicht auf das Array zugreifen kann. Mit Strings geht es aber irgendwie so halt nicht. Mein Code bis jetzt!
Java:
package de.writer.java;


import java.awt.AWTException;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
public class Writer {

    private static final String FILENAME = "C://Users//Cornelius//Desktop//writepossibilities.txt";
    public static int g = 0;
   
   
    public static void main(String[] args) {
           
        BufferedWriter bw1 = null;
        FileWriter fw1 = null;

        try {
            File file = new File(FILENAME);
            if(file.createNewFile())
            {
                System.out.println("Success!");
            }else{
                file.delete();
                file.createNewFile();
                System.out.println("The File has been deleted and a new one was created!");
            }
            //Runtime.getRuntime().exec("notepad");
            char[] carray = new char[96];
           
            for (char i ='a'; i <='z'; i++){
                int o= 0;
                carray[o] = i;
                o++;
                carray[o] = (char) (i-32) ;
                o++;
            }
           
            char[] a = "üÜöÖäÄ@€ |<>~*+'#.:]}ß?()/&%=$§\"!^°µ".toCharArray();
            for (int h = a.length; h > 0; h--) {
                carray[96 - h] = a[g];
                g++;
            }
           
           
            for (int i = carray.length; i<=0; i--)    {
           
            fw1 = new FileWriter(file);
            bw1 = new BufferedWriter(fw1);

            bw1.write(carray[i]);
           
                    }
            System.out.println("Done!");
               
        } catch (IOException e) {

            e.printStackTrace();

        } finally {

            try {

                if (bw1 != null)
                    bw1.close();

                if (fw1 != null)
                    fw1.close();

               
                } catch (IOException ex) {

                ex.printStackTrace();

                }

            }
       
        }

   


    }

Danke für all die Hilfe bis jetzt
 
1. Im folgenden Abschnitt erstellst Du für jedes Zeichen einen neuen FileWriter - und überschreibst damit für jedes Zeichen die Datei:
Code:
        for (int i = carray.length; i<=0; i--)    {       
            fw1 = new FileWriter(file);
            bw1 = new BufferedWriter(fw1);

            bw1.write(carray[i]);
        }
2. "Writer" ist kein guter Name für die Klasse (java.io.Writer)
3. g sollte weder eine Instanz- noch eine Klassenvariable, sondern einfach eine lokale Variable sein.
4. Verwende try-with-resources
5. Strukturiere den Code.
6. Die Datei braucht weder explizit erzeugt, noch vorher gelöscht zu werden. Das erledigt der FileWriter automatisch.
7. Was soll der Code hier bewirken?
Code:
            for (char i ='a'; i <='z'; i++){
                int o= 0;
                carray[o] = i;
                o++;
                carray[o] = (char) (i-32) ;
                o++;
            }
8. Soll carray wirklich in umgekehrter Reihenfolge ausgegeben werden?
9. Writer (der aus java.io) hat eine write-Methode, die ein char-Array entgegennimmt...
 
Moin,

und wo wir schon so schön dabei sind:

10. Überdenke Deine Variablennamen!!! Je größer das Projekt wird, desto weniger wirst Du selbst verstehen, was mal mit 'o' oder 'bw1' gemeint war! Von anderen (wenn Du mal im Team arbeitest) ganz zu schwiegen! Das Zauberwort heißt hier: sprechende Variablennamen!

VG Klaus
 
1,2,3,4,6,8,10,11 erledigt
5: wie kann man den denn besser strukturieren? Leere Zeilen weg oder wie?
7:
Code (Text):
for (char i ='a'; i <='z'; i++){
int o= 0;
carray[o] = i;
o++;
carray[o] = (char) (i-32) ;
o++;
}
soll alle buchstaben von a-z und A-Z zum carray hinzufügen, damit ich später einfach nurnoch über das carray iterieren muss, damit der Writer mir alle bestandteile von carray in jeder beliebigen Reihenfolge in eine txt Datei schreiben kann.

9tens noch am gucken. Danke für die Antworten. Mein Code bis jetzt:
Code:
package de.writer.java;
import java.io.*;
public class Writepossibilities {

    private static final String FILENAME = "C:/Users/Cornelius/Desktop/writepossibilities.txt";
   
   
    public static void main(String[] args) throws IOException {
            char[] carray = new char[96];
            for (char i ='a'; i <='z'; i++){
                int carrayZähler= 0;
                carray[carrayZähler] = i;
                carrayZähler++;
                carray[carrayZähler] = (char) (i-32) ;
                carrayZähler++;
            }
            char[] a = "üÜöÖäÄ@€ |<>~*+'#.:]}ß?()/&%=$§\"!^°µ".toCharArray();
            for (int h = a.length; h > 0; h--) {
                int g =0;
                carray[96 - h] = a[g];
                g++;
            }
            try (FileWriter filewriter1 = new FileWriter(FILENAME);
                 BufferedWriter bufferedwriter1 = new BufferedWriter(filewriter1)){
                for (int i = 0; i>= carray.length; i++){   
                bufferedwriter1.write(carray[i]);                                                    }
                    }
            System.out.println("Done!");
                }
    }
 
wie kann man den denn besser strukturieren?
Mit Methoden, die aussagekräftige Namen haben. Wobei der Code jetzt bereits wesentlich besser lesbar ist.

Bei Punkt 9 helfe ich mal direkt, denn das ist trivial:

Code:
try(FileWriter writer = new FileWriter(FILENAME)) {
    writer.write(carray);
}

Damit wird auch der Fehler behoben, dass Dir Dein Code nichts ausgeben wird (s. Bedingung der for-Schleife am Ende), weil die for-Schleife wegfällt 🙂

Dann schau Dir mal an, was Dein carrayZähler macht.

Unabhängig davon: das Array hat Platz für 96 Zeichen. In der ersten Schleife willst Du vermutlich die ersten 26 Zeichen setzen, in der zweiten die letzten 36 (wenn ich mich nicht verzählt habe). Da fehlen doch noch ein paar, oder? EDIT: ah, den carrayZähler übersehen. Passt.

Was soll der ganze Spaß überhaupt bewirken?
 
Zuletzt bearbeitet:
Also rein theoretisch sollte das ja jetzt funktionieren
Java:
            try (FileWriter filewriter1 = new FileWriter(FILENAME);
                 CharArrayWriter charWriter = new CharArrayWriter()){
                for (int i = 0; i>= carray.length; i++){   
                charWriter.write(carray);
                charWriter.writeTo(filewriter1);
                }
            }

Tja tut er aber nicht
 
hm ich hab wohl zu kompliziert gedacht mit dem da oben?
Naja immerhin ein erster erfolg, der Writer hat schonmal Zz in die Datei geschrieben.

Mit dem Gerüst möchte ich, ein Programm schreiben, dass mir eine Datei erstellt, die alle Kombos, die aus den angegebenen Zeichen möglich sind als Liste mit einer Zeilenlänge von bis zu 200 Zeichen zusammenstellt. Das ganze soll dann später sortiert werden, sodass nur Zeilen, die auch Code sind übrig bleiben. Das wird dann als Futter verwendet für ein Programm, dass dann random eine Zeile pickt und mir ein zufällig generiertes Programm zusammenstellt. Soweit der Plan. Das wird noch lange dauern. Immerhin sind das einige Zeilen zu schreiben lol.

Hab mal das ganze mit der for schleife implementiert...und schwupps es passiert gar nichts mehr 🙁
 
Java:
package de.writer.java;
import java.io.*;
public class Writepossibilities {

    private static final String FILENAME = "C:/Users/Cornelius/Desktop/writepossibilities.txt";
  
  
    public static void main(String[] args) throws IOException {
      
        char[] carray = new char[96];
        for(int i =0; i <carray.length; i++){  
            for (char e ='a'; e <='z'; e++){
                int carrayZähler= 0;
                carray[carrayZähler] = (char) e;
                carrayZähler++;
                carray[carrayZähler] = (char) (e-32) ;
                carrayZähler++;
            }
          
            char[] mitCarrayInegrieren = "üÜöÖäÄ@€ |<>~*+'#.:]}ß?()/&%=$§\"!^°µ".toCharArray();
            for (int h = mitCarrayInegrieren.length; h > 0; h--) {
                int weitererCarrayZähler=0;
                carray[96 - h] = mitCarrayInegrieren[weitererCarrayZähler];
                weitererCarrayZähler++;
            }
          
            try(FileWriter writer = new FileWriter(FILENAME)) {
                writer.write(carray[i]);
                }
            }  
            System.out.println("Done!");
        }
    }

EDIT: und ja, ich hab auch die Schleife im und außerhalb des try with ressources versucht. Das Programm stoppt, nachdem es mir ü in die Datei schreibt -_-
 
Zuletzt bearbeitet:
Ich sehe schon uups...der wird jedes mal wieder auf 0 gesetzt oder?

Java:
package de.writer.java;
import java.io.*;
public class Writepossibilities {

    private static final String FILENAME = "C:/Users/Cornelius/Desktop/writepossibilities.txt";
  
  
    public static void main(String[] args) throws IOException {
      
        char[] carray = new char[96];
        for(int i =0; i <carray.length; i++){  
            int carrayZähler= 0;
            for (char e ='a'; e <='z'; e++){
                carray[carrayZähler] = (char) e;
                carrayZähler++;
                carray[carrayZähler] = (char) (e-32) ;
                carrayZähler++;
            }
          
            char[] mitCarrayInegrieren = "üÜöÖäÄ@€ |<>~*+'#.:]}ß?()/&%=$§\"!^°µ".toCharArray();
            int weitererCarrayZähler=0;
            for (int h = mitCarrayInegrieren.length; h > 0; h--) {
             
                carray[96 - h] = mitCarrayInegrieren[weitererCarrayZähler];
                weitererCarrayZähler++;
            }
          
            try(FileWriter writer = new FileWriter(FILENAME)) {
                writer.write(carray[i]);
                }
            }  
            System.out.println("Done!");
        }
    }

EDIT: so ist jetzt außerhalb der Schleife. Besser? jetzt schreibt der nur µ rein ;-;🙁
 
Mit dem Gerüst möchte ich, ein Programm schreiben, dass mir eine Datei erstellt, die alle Kombos, die aus den angegebenen Zeichen möglich sind als Liste mit einer Zeilenlänge von bis zu 200 Zeichen zusammenstellt.

Bei 200 Stellen und 96 Möglichkeiten je Stelle sind das 96^200 Möglichkeiten - das wird "etwas" dauern...
 
so besser? das wirft nen index out of bounds, genau wie erwartet
(und ja, ich habe die for schleife schon an ihrem ursprünglichen ort eingefügt, dann wurde wieder nur µ geschrieben)

Java:
package de.writer.java;
import java.io.*;
public class Writepossibilities {

    private static final String FILENAME = "C:/Users/Cornelius/Desktop/writepossibilities.txt";
  
  
    public static void main(String[] args) throws IOException {
      
        char[] carray = new char[96];
        int carrayZähler= 0;
        int weitererCarrayZähler=0;
        for(int i =0; i <carray.length; i++){  
            for (char e ='a'; e <='z'; e++){
                carray[carrayZähler] = (char) e;
                carrayZähler++;
                carray[carrayZähler] = (char) (e-32) ;
                carrayZähler++;
            }
          
            char[] mitCarrayInegrieren = "üÜöÖäÄ@€ |<>~*+'#.:]}ß?()/&%=$§\"!^°µ".toCharArray();
            for (int h = mitCarrayInegrieren.length; h > 0; h--) {
             
                carray[96 - h] = mitCarrayInegrieren[weitererCarrayZähler];
                weitererCarrayZähler++;
            }
          
            try(FileWriter writer = new FileWriter(FILENAME)) {
                writer.write(carray[i]);
                }
            }  
            System.out.println("Done!");
        }
    }
 
Sorry, war mein Fehler. Hatte das zweite for überlesen.

Allerdings: was soll das bringen, das Array jedesmal neu aufzubauen?
 
Die Schleife wird schon ausgeführt: Du überschreibst jedesmal die Datei und schreibst dort ein einzelnes Zeichen rein.
 
In dem Du die Datei anfangs erstellst und in der Schleife nur noch schreibst 🙂

Sprich: die Schleife muss in den try-Block.
 
So, jetzt aber mal zurück zum Problem: wenn ich Dich richtig verstehe, willst Du ja "sämtliche" Kombinationen ausgeben. D. h. Du hast einen Zeichenvorrat und zählst dann einfach alle auf, richtig?
 
Ja im Endeffekt ist es so. Ich bin mir nicht ganz sicher, ob ich dann 200 Schleifen ineinander laufen lassen muss, aber naja was tut man nicht alles einfach nur so xD
 

Zurück
Oben