Operatoren if (arri[i] != "test.java"&& arri[i] != "test.class")

Diskutiere if (arri[i] != "test.java"&& arri[i] != "test.class") im Java Basics - Anfänger-Themen Bereich.
Mr_Kleeblatt

Mr_Kleeblatt

Hey, ich frage mich, ob mir einer von euch helfen könnte? Ich wollte ein Programm (in Java) in einem Ordner OrdnerX erstellen, welches mir in 16 Ordnern jeweils 25 Dateien erstellt weil ich zu faul war, das alles selber zu machen... Hier ist mal der Ordnerpfad, den ich habe bzw haben will:
OrdnerX
-> folderA
--> 0.json
--> 1.json
--> ...(25 Dateien)
-> folderB
--> (25 Dateien)
-> folderC
--> (25 Dateien)


In den [number].json-Dateien soll das hier drin stehen:
{
"parent": "block/note_block/note_block",
"textures": {
"note": "block/note_block/notes/[number]",
"instrument": "block/note_block/instruments/[Ordnername, in der diese Datei ist]"
}
}

Übrigens: Die Namen der Ordner (folderA, folderB,...) kenne ich bereits:
Unbenannt.png
Dafür habe ich das hier gecodet:
Java:
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;

class test {
  public static void main(String[] args) {

    File f = new File("./");
    String[] arri = f.list();

    String str;

    for (int i = 0; i < arri.length; i++) {
      for (int j = 0; j < 25; j++) {

        str = arri[i] + "/" + j + ".json";
        try {

          if (arri[i] != "test.java" && arri[i] != "test.class" && arri[i] != "note_block.json") {
            OutputStream stream = new FileOutputStream(str);
            String inhalt =
                "{\n            \"parent\": \"block/note_block/note_block\",\n            \"textures\": {\n                \"note\": \"block/note_block/notes/"
                    + j
                    + "\",\n                \"instrument\": \"block/note_block/instruments/"
                    + arri[i]
                    + "\"\n            }\n        }";
            stream.write(inhalt.getBytes());
          }

        } catch (IOException e) {
          e.printStackTrace();
        }
      }
    }
  }
}
Aber irgendwie ist die if (arri[i] != "test.java" && arri[i] != "test.class" && arri[i] != "note_block.json") immer true und wird, egal ob die jeweilige Datei einen der aufgeführten Namen hat oder nicht, immer ausgeführt... WARUM?!? Ich habe schon ausprobiert, ob es an den && liegt, aber selbst || bringt das gleiche Ergebnis...
 
J

JustNobody

Strings sind Instanzen und die vergleicht man mit equals. Mit == bzw. != vergleichst du nur Referenzen.
 
mihe7

mihe7

Noch ein paar Vorschläge zum Code:
  1. die Klasse heißt Test und nicht test (in Java schreibt man Klassennamen mit großem Anfangsbuchstaben, weil es sich in der Regel um Substantive handelt)
  2. es gibt keinen Grund, den try-Block größer als nötig zu machen
  3. es ist nicht sehr nett, wenn Du Hunderte von Dateihandles verbrätst, weil Du die Dateien nicht schließt
  4. den String kannst Du als Konstante definieren und brauchst die Werte dann nur noch einzusetzen
  5. das if ist strange. Damit meine ich nicht den String-Vergleich (s. @JustNobody) sondern das Vorgehen. Wenn ich es richtig sehe, willst Du halt wissen, ob das Ding ein Verzeichnis ist. Dafür gibt es Methoden im File-Objekt.
  6. die Definition von eigenen Methoden ist erlaubt
Mal ein Beispiel:

Java:
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import static java.nio.charset.StandardCharsets.UTF_8;

class Test {
    private static final String CONTENT =
        "{\n" +
        "    \"parent\": \"block/note_block/note_block\",\n" +
        "    \"textures\": {\n" +
        "        \"note\": \"block/note_block/notes/%d\",\n" +
        "        \"instrument\": \"block/note_block/instruments/%s\"\n" +
        "    }\n"+
        "}";

    public static void main(String[] args) {
        File root = new File("./");
        populateDirectories(root);
    }

    private static void populateDirectories(File root) {
        File[] directories = root.listFiles((File f) -> f.isDirectory());
        for (File directory : directories) {
            populateDirectory(directory);
        }
    }

    private static void populateDirectory(File dir) {
        for (int j = 0; j < 25; j++) {
            writeInstrument(dir, j);
        }
    }

    private static void writeInstrument(File dir, int instrumentNo) {
        String output = String.format(CONTENT, instrumentNo, dir.getName());
        File file = new File(dir, instrumentNo + ".json");
        try(FileOutputStream fos = new FileOutputStream(file)) {
            fos.write(output.getBytes(UTF_8));
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }
}
 
Mr_Kleeblatt

Mr_Kleeblatt

Oooh, soweit habe ich gar nicht gedacht... Vielen Dank für die Antworten! Ich bin überrascht, wie schnell jemand geantwortet hat😅
Und danke auch für den Hinweis mit == und equals, das wusste ich tatsächlich auch noch nicht.
 
Thema: 

if (arri[i] != "test.java"&& arri[i] != "test.class")

Passende Stellenanzeigen aus deiner Region:
Anzeige

Anzeige

Anzeige
Oben