Ich habe folgense Anweisung in meinem code:
"name" ist ein string, der das Wort "concrete" enthält, das durch das Wort "terracotta" ersetzt werden soll.
Aber "concrete" wird bei mir rot unterstrichen und es sagt etwas von "invalid character constant".
Hier ist die ganze Java-classe:
Ich möchte damit Dateien zu einem anderen Projekt hinzufügen, da das per Hand ziemlich langsam und mühsam wäre.
Dazu möchte ich verschiedene Teile von dem Code auskommentieren oder reaktivieren, um Dateien mit verschiedenen modifizierungs-optionen erstellen zu können.
Der fehler ist in dieser Zeile:
aber komischer weise nur im ersten Vorkommen von "replace".
Edit:
Ich glaube, ich habe die Lösung:
Alle Wörter in beiden vorkommen dieser Methode mussten in " " und nicht in ' '.
Ich dachte, sie müssten in die zweite variante, da in der Beschreibung der Methode "CharSequence" steht und nicht "String"
Mich wundert aber trotzdem, warum nicht alle 4 Wörter gleichzeitig rot unterstrichen waren, spndern erst nach und nach beim korrigieren...
Das sah nämlich erst aus, als op nur mit dem ersten davon etwas nicht stimmt, die anderen aber ok sind.
Java:
name.replace('concrete', 'terracotta');
Aber "concrete" wird bei mir rot unterstrichen und es sagt etwas von "invalid character constant".
Hier ist die ganze Java-classe:
Java:
import java.io.Closeable;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.nio.channels.FileChannel;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.StandardOpenOption;
import java.util.ArrayList;
import java.util.Arrays;
public class JsonFileCreateHelper
{
static File dir1 = new File("D:\\Mods\\1_15_1\\FlatTilesMod\\src\\main\\resources\\assets\\flattilesmod\\blockstates");
static File dir2 = new File("D:\\Mods\\1_15_1\\FlatTilesMod\\src\\main\\resources\\assets\\flattilesmod\\models\\block");
static File dir3 = new File("D:\\Mods\\1_15_1\\FlatTilesMod\\src\\main\\resources\\assets\\flattilesmod\\models\\item");
static File dir4 = new File("D:\\Mods\\1_15_1\\FlatTilesMod\\src\\main\\resources\\data\\flattilesmod\\recipes");
static ArrayList<File> list1 = new ArrayList<File>(Arrays.asList(dir1.listFiles()));
static ArrayList<File> list2 = new ArrayList<File>(Arrays.asList(dir2.listFiles()));
static ArrayList<File> list3 = new ArrayList<File>(Arrays.asList(dir3.listFiles()));
static ArrayList<File> list4 = new ArrayList<File>(Arrays.asList(dir4.listFiles()));
public static void main(String[] args) throws IOException
{
int i;
/*for (i = 0; i < list1.size(); i++)
{
File dir = list1.get(i);
createFile(dir1, dir.getName(), "glazed_");
}
for (i = 0; i < list2.size(); i++)
{
File dir = list2.get(i);
createFile(dir2, dir.getName(), "glazed_");
}
for (i = 0; i < list3.size(); i++)
{
File dir = list3.get(i);
createFile(dir3, dir.getName(), "glazed_");
}*/
for (i = 0; i < list4.size(); i++)
{
File dir = list4.get(i);
createFile(dir4, dir.getName(), "glazed_");
}
}
public static void createFile(File dir, String name, String subString)
{
if( name.contains("concrete") && name.endsWith(".json"))
{
try
{
//writeFile(dir, rename(name, subString), rename(readFile(name), subString));
writeFile(dir, name.replace('concrete', 'terracotta'), readFile(name).replace('concrete', 'terracotta'), subString);
//copy (dir, new File (dir1, rename(dir.getName(), subString)));
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
/*@SuppressWarnings("unused")
private static void copy(File source, File destination) throws IOException
{
long length = source.length();
@SuppressWarnings("resource")
FileChannel input = new FileInputStream(source).getChannel();
try
{
@SuppressWarnings("resource")
FileChannel output = new FileOutputStream(destination).getChannel();
try
{
for (long position = 0; position < length; )
{
position += input.transferTo(position, length-position, output);
}
}
finally
{
output.close();
}
}
finally
{
input.close();
}
}*/
@SuppressWarnings("resource")
public static String readFile(String filename) throws IOException
{
File file = new File(filename);
int len = (int) file.length();
byte[] bytes = new byte[len];
FileInputStream fis = null;
try
{
fis = new FileInputStream(file);
assert len == fis.read(bytes);
}
catch (IOException e)
{
close(fis);
throw e;
}
return new String(bytes, "UTF-8");
}
public static String rename (String source, String part)
{
String new_content = new String();
int i;
for (i = 0; i < source.length(); i++)
{
new_content += source.charAt(i);
if (source.charAt(i) == '_' && source.charAt(i + 1) == 't'&& source.charAt(i + 2) == 'e' && source.charAt(i + 1) == 'r')
{
new_content += part;
}
}
return new_content;
}
public static void writeFile(File file, String filename, String text) throws IOException
{
Path path = file.toPath();
OutputStream os = null;
try
{
os = Files.newOutputStream(path, StandardOpenOption.CREATE_NEW);
os.write(text.getBytes("UTF-8"));
}
catch (IOException e)
{
close(os);
throw e;
}
}
public static void close(Closeable closeable)
{
try
{
closeable.close();
}
catch (IOException ignored)
{
}
}
}
Dazu möchte ich verschiedene Teile von dem Code auskommentieren oder reaktivieren, um Dateien mit verschiedenen modifizierungs-optionen erstellen zu können.
Der fehler ist in dieser Zeile:
Java:
writeFile(dir, name.replace('concrete', 'terracotta'), readFile(name).replace('concrete', 'terracotta'), subString);
Edit:
Ich glaube, ich habe die Lösung:
Alle Wörter in beiden vorkommen dieser Methode mussten in " " und nicht in ' '.
Ich dachte, sie müssten in die zweite variante, da in der Beschreibung der Methode "CharSequence" steht und nicht "String"
Mich wundert aber trotzdem, warum nicht alle 4 Wörter gleichzeitig rot unterstrichen waren, spndern erst nach und nach beim korrigieren...
Das sah nämlich erst aus, als op nur mit dem ersten davon etwas nicht stimmt, die anderen aber ok sind.
Zuletzt bearbeitet: