У меня есть приложение, в котором я должен прочитать .txt-файл, чтобы сохранить некоторые значения и сохранить их. Это работает очень хорошо, за исключением того факта, что я хочу сделать эти значения нечитаемыми или «непонятными» для внешних пользователей.Байт-шифрование для текстового файла
Моей идеей было преобразовать содержимое файла в шестнадцатеричный или двоичный, и в процессе чтения измените его на Char. Дело в том, что у меня нет доступа к таким методам, как String.Format, из-за моего компилятора.
Вот как я в настоящее время чтения и сохранения значения:
byte[] buffer = new byte[1024];
int len = myFile.read(buffer);
String data = null;
int i=0;
data = new String(buffer,0,len);
класса, чтобы открыть и управлять файлом:
public class File {
private boolean debug = false;
private FileConnection fc = null;
private OutputStream os = null;
private InputStream is = null;
private String fileName = "example.txt";
private String pathName = "logs/";
final String rootName = "file:///a:/";
public File(String fileName, String pathName) {
super();
this.fileName = fileName;
this.pathName = pathName;
if (!pathName.endsWith("/")) {
this.pathName += "/"; // add a slash
}
}
public boolean isDebug() {
return debug;
}
public void setDebug(boolean debug) {
this.debug = debug;
}
public void write(String text) throws IOException {
write(text.getBytes());
}
public void write(byte[] bytes) throws IOException {
if (debug)
System.out.println(new String(bytes));
os.write(bytes);
}
private FileConnection getFileConnection() throws IOException {
// check if subfolder exists
fc = (FileConnection) Connector.open(rootName + pathName);
if (!fc.exists() || !fc.isDirectory()) {
fc.mkdir();
if (debug)
System.out.println("Dir created");
}
// open file
fc = (FileConnection) Connector.open(rootName + pathName + fileName);
if (!fc.exists())
fc.create();
return fc;
}
/**
* release resources
*/
public void close() {
if (is != null)
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
is = null;
if (os != null)
try {
os.close();
} catch (IOException e) {
e.printStackTrace();
}
os = null;
if (fc != null)
try {
fc.close();
} catch (IOException e) {
e.printStackTrace();
}
fc = null;
}
public void open(boolean writeAppend) throws IOException {
fc = getFileConnection();
if (!writeAppend)
fc.truncate(0);
is = fc.openInputStream();
os = fc.openOutputStream(fc.fileSize());
}
public int read(byte[] buffer) throws IOException {
return is.read(buffer);
}
public void delete() throws IOException {
close();
fc = (FileConnection) Connector.open(rootName + pathName + fileName);
if (fc.exists())
fc.delete();
}
}
Я хотел бы знать, простой способ, как читать это содержание. Двоичный или шестнадцатеричный, оба будут работать на меня.
Какой компилятор вы используете, который не поддерживает метод форматирования String? Это было с тех пор, как Java 1.5 ... Порекомендовал бы обновить ваш компилятор, если это вариант. – Ironcache
Это не так, поскольку я разрабатываю для устройства, которое работает только с 1.3, к сожалению. – Lkun
У меня, конечно же, нет непосредственных знаний о том, как это сделать, но это [этот вопрос] (http://stackoverflow.com/questions/9655181/how-to-convert-a-byte-array-to-a -hex-string-in-java) полезен вообще? – Ironcache