Прежде чем вы думаете, что это слишком долго, пожалуйста, попробуйте мне помочь, я был над этим вопросом весь день (9:52 AM - 4:54 PM), это просто меня беспокоит.
Кажется, я не могу правильно сохранить эти данные. У меня есть в основном дубликаты и строки, я сохраняю их в файле .txt с именем "autosAudi.txt", я получаю эти странные коды и блоки, а иногда и по какой-то причине китайский язык в моемтекстовые поля?Вот пример того, что появляется:
http://www.flickr.com/photos/63259070@N06/6449175293
, поскольку вы можете видеть, что эти странные поля нигде не появляются. Я ничего подобного не регистрировал, способ навигации по данным заключается в нажатии>> (next) или << (previous) и информация должна измениться, текстовое поле рядом с «Numero» должно дать мне возможность ввести int-код, чтобы я мог искать данные (например, если я пишу1, его должен найти этот реестр).он работает только для числа 1 и после этого выдает эту ошибку: </p>
run:
3-Dec-2011 5:02:01 PM rent_autos.Interfaz3 jbBucar_AMouseClicked
SEVERE: null
java.io.EOFException
at java.io.RandomAccessFile.readChar(RandomAccessFile.java:695)
at rent_autos.Autos.leerCadena(Autos.java:276)
at rent_autos.Autos.buscar(Autos.java:344)
at rent_autos.Interfaz3.jbBucar_AMouseClicked(Interfaz3.java:4640)
at rent_autos.Interfaz3.access$1100(Interfaz3.java:30)
at rent_autos.Interfaz3$12.mouseClicked(Interfaz3.java:745)
at java.awt.Component.dispatchEventImpl(Component.java:4630)
at java.awt.Container.dispatchEventImpl(Container.java:2099)
java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
Вот код, который я использовал для сохранения файла в "autosAudi.txt":
public void guardar() throws IOException {
int opcion = JOptionPane.showConfirmDialog(null,"¿Desea guardar los
cambios?","Datos Persona",JOptionPane.YES_NO_CANCEL_OPTION);
if(opcion == 0){
RandomAccessFile f = new RandomAccessFile("autosAudi.txt","rw");
f.seek(f.length());
f.writeInt(codigo);
f.writeDouble(costo);
f.writeDouble(rendimientoGalon);
escribirCadena(f, ACRISS);
escribirCadena(f, color);
escribirCadena(f, modelo);
escribirCadena(f, tipoAM);
escribirCadena(f, placa);
escribirCadena(f, marca );
f.close();
}
}
А также используется:
public boolean cargarDatosRegistro(long iPosicion, String sRuta){
boolean bRealizado = true;
try {
RandomAccessFile fRegistro = new RandomAccessFile(sRuta,"rw");
fRegistro.seek(iPosicion);
codigo = fRegistro.readInt();
costo = fRegistro.readDouble();
rendimientoGalon = fRegistro.readDouble();
ACRISS = leerCadena(fRegistro);
color = leerCadena(fRegistro);
modelo = leerCadena(fRegistro);
tipoAM = leerCadena(fRegistro);
placa = leerCadena(fRegistro);
marca = leerCadena(fRegistro);
fRegistro.close();
} catch (Exception e) {
bRealizado = false;
}
return bRealizado;
}
Метод escribirCadena используется на типах String, потому что у java нет .writeString, вот код для этого:
private void escribirCadena( RandomAccessFile file, String cadena) throws IOException
{
StringBuffer buffer = (cadena == null)? new StringBuffer(15):
new StringBuffer(cadena);
buffer.setLength(30);
file.writeChars(buffer.toString());
}
И метод leerCadenaпредназначен для чтения строк:
private String leerCadena( RandomAccessFile file ) throws IOException {
char cadena[] = new char[30], temp;
for ( int c=0;c<cadena.length;c++)
{
temp = file.readChar();
cadena[c]=temp;
}
return new String(cadena).replace('\0',' ');
}
Я сделал этот проект на примере моего репетитора, и файлы действительно разные, вот картинка:
http://www.flickr.com/photos/63259070@N06/6449172477/in/photostream/
Тот, который говорит «Registro.txt», - мои учителя, а «autosAudi.txt» - мой
Вот еще одна вещь: метод поиска типа long:
public void buscar(int cod) throws IOException{
RandomAccessFile f = new RandomAccessFile("autosAudi.txt","rw");
boolean encontrado=false;
registroExistente = false ;
long bytes = 0;
do{
codigo = f.readInt();
costo = f.readDouble();
rendimientoGalon = f.readDouble();
ACRISS = leerCadena(f);
color = leerCadena(f);
modelo = leerCadena(f);
tipoAM = leerCadena(f);
placa = leerCadena(f);
marca = leerCadena(f);
if(cod==codigo){
iCodigoBusqueda = codigo;
encontrado=true;
registroExistente = true;
break;
}else{
iCodigoBusqueda = 0;
registroExistente = false;
}
bytes += iTamanioRegistro;
f.seek(bytes);
}
while(bytes<f.length());
if(!encontrado){
registroExistente = false;
JOptionPane.showMessageDialog(null,"Archivo no encontrado");
}
f.close();
}
Так может кто-нибудь помочь мне здесь !, было бы здорово, я знаю, что это долго, но если у кого-то есть знания, чтобы решить эту проблему, пожалуйста, поделитесь, и да, я должен попробовать .dat типы файлов