Я пытаюсь прочитать текст из файла, который содержит серию байтов, и хочу, чтобы они были обращены обратно к буквам/цифрам, которые будут использоваться снова. Я не нашел подходящего метода для этого при поиске в StackOverflow или Google. Чтобы показать, что я имею в виду, вот мой код:
FileReader fileReader = new FileReader("test.txt");
BufferedReader bufferedReader = new BufferedReader(fileReader);
String lineFromFile = bufferedReader.readLine();
System.out.println("From File: " + lineFromFile);
OUTPUT:
From File: [78, 97, 109, 101, 32, 116, 101, 115, 116, 32, 99, 97, 114, 100, 78, 111, 32, 54, 55, 56, 56, 55, 53, 55, 49, 57, 32, 67, 117, 114, 114, 101, 110, 116, 32, 66, 97, 108, 97, 110, 99, 101, 32, 51, 55, 48, 32, 111, 118, 101, 114, 100, 114, 97, 102, 116, 32, 102, 97, 108, 115, 101, 32, 111, 118, 101, 114, 68, 114, 97, 102, 116, 76, 105, 109, 105, 116, 32, 48, 32, 112, 105, 110, 32, 50, 53, 50, 53]
Эти байты представляют буквы/числа, которые я предварительно закодировал, прежде чем записывать их в файл из другой программы Java
.
Что я пробовал?
byte[] bytes = lineFromFile.split("\\s+");
String fileToString= new String(bytes, UTF_8);
System.out.println("text: " + fileToString);
Указанная ошибка:
error: incompatible types: String[] cannot be converted to byte[]
byte[] bytes = text.split("\\s+");
^
Если бы кто-нибудь мог предложить способ сделать это или, может быть, даже лучший способ кодирования, который проще декодировать после чтения из файла, это было бы очень полезно!
Вы написали символы, как цифры, а не бинарные. Вам нужно прочитать эти цифры как текст и преобразовать их в символы.
String lineFromFile = bufferedReader.readLine();
// strip out the '[' and ']'
lineFromFile = lineFromFile.substring(1, lineFromFile.length()-1);
StringBuilder sb = new StringBuilder();
for(String s: lineFromFile.split(", "))
sb.append((char) Integer.parseInt(s));
String text = sb.toString();
Open a FileInputStream to the file that youve stored the Object to.
Open a ObjectInputStream to the above FileInpoutStream.
Use readObject method of ObjectInputStream class to read the Object from the file.
The above method returns an Object of type Object. So you have to cast it to the original type to use it properly.
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
public class ObjectIOExample {
private static final String filepath="C:\\....obj";
public static void main(String args[]) {
ObjectIOExample objectIO = new ObjectIOExample();
//Read object from file
Student st = (Student) objectIO.ReadObjectFromFile(filepath);
System.out.println(st);
}
public Object ReadObjectFromFile(String filepath) {
try {
FileInputStream fileIn = new FileInputStream(filepath);
ObjectInputStream objectIn = new ObjectInputStream(fileIn);
Object obj = objectIn.readObject();
System.out.println("The Object has been read from the file");
objectIn.close();
return obj;
} catch (Exception ex) {
ex.printStackTrace();
return null;
}
}
}
split()
возвращает массив String. Используйте lineFromFile.getBytes()
он возвращает последовательность байтов.
byte[] bytes = details.getBytes(UTF_8);
детали - этоString
цифр / букв, аUTF_8
- кодировка.