forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   JAVA Micro Edition (http://forum.boolean.name/forumdisplay.php?f=52)
-   -   Чтение и запись файлов (http://forum.boolean.name/showthread.php?t=7851)

Spiderman 17.02.2009 17:55

Чтение и запись файлов
 
Всем привет!

Начну с того, что на javе пишу всего около двух недель так что вопрос будет начального уровня.

Необходимо прочитать локацию побайтово из файла. Нашел несколько примеров чтения из файла, но все они огрызаются. Например:

Цитата:

public static byte [] loadFileAsBytes((
File file)throws IOException
{
byte [] result==new byte [(int)file.length()];
loadFileAsBytes(file,result);
return result;
}
}
f.close();
}
Компиляция матерится на классе File и всем, что относится к считыванию. Подскажите что я не так делаю, может в мобильных приложениях это делается как-то подругому...

ViNT 17.02.2009 22:37

Ответ: Чтение и запись файлов
 
Не, в java так не делается.
Читай для примера описание работы с jsr75 (javax.microedition.io.file), хотя еще надо учесть, что у разных производителей телефонов свои специфические API для работы с ФС.

Spiderman 18.02.2009 00:21

Ответ: Чтение и запись файлов
 
Хорошо, перефразирую свой вопрос:

Как лучше реализовать чтение данных о локациях (к примеру массив байт 20х20), таких локаций 10-ки. Может класс массивов создать и читать оттуда?

ViNT 18.02.2009 00:27

Ответ: Чтение и запись файлов
 
Так, стоп. Для начала, откуда планируется читать данные - из ФС или из ресурса?

Spiderman 18.02.2009 11:26

Ответ: Чтение и запись файлов
 
Мне все равно. Я в java пока ребенок так что чем проще тем лучше. Думаю, не мне пока знать откуда удобнее считывать данные о локации.

Мне кажется, что проще всего сформировать отдельный класс в котором будут двухмерные массивы локаций (т.е. просто набивать вручную) и передавать главному массиву i-й элемент, где i будет номером локации

Phantom 18.02.2009 18:51

Ответ: Чтение и запись файлов
 
Я мобильником начал пользоваться раньше компа, поэтому всё в нём перелазил, перепробовал. Когда сел за комп, уже знал многие тонкости той же Java, хотя не знал самого языка. Например, уже знал, что из файловой системы так просто файл не считать, во-первых, у всех мобил разное АПИ (правда, я тогда этого слова не знал), а во-вторых, мобилы борются за сохранность данных от несертифицированных приложений (вылазит окошко подтверждения). Из ресурса же считать файл просто. Ещё занимался ресурсозаменением, менял картинки, текстовые ресурсы, мелодии. Это ещё было во времена, когда PaintCAD не умел сохранять рисунки в png. Не беда. Я сохранял в gif, переименовывал в png, засовывал в приложение и оно работало (по крайней мере у меня на сименсе). Очень интересно видеть иногда людей, которые разбираются в компах, в программировании, но когда дело доходит до телефонов - это тёмный лес для них, и напротив, видеть ламеров, у которых порой нет компа, но которые знают гораздо больше меня о устройстве телефонов и JVM. =)

Spiderman 20.02.2009 13:12

Ответ: Чтение и запись файлов
 
Примерчик чтения ресурса в студию!
И еще где можно эти ресы сконструировать?

Phantom 20.02.2009 13:29

Ответ: Чтение и запись файлов
 
Тебе ресурс как надо считать? В байтовый массив? В строку?

Phantom 20.02.2009 13:46

Ответ: Чтение и запись файлов
 
PHP код:

// Открываем ресурс data.txt
InputStream is=getClass().getResourceAsStream("/data.txt");
// Теперь можно читать из потока is
// Например, нужно считать 5 байт в массив
// Создаём массив
byte[] by=null;
// Инициализируем массив с пятью ячейками
by=new byte[5];
// Считываем из потока в массив 5 байт начиная с нулевой ячейки
is.read(by,0,5);
// Создаём строковую переменную
String str="";
// Теперь считаем из потока ещё 5 байт, но теперь в строку
for(int i=0;i<5;i++){
  
str=str+(char)is.read();
}
// Не забываем закрыть поток
is.close(); 

Если ресурс прочитали до конца и пытаться прочитать дальше, то is.read() будет возвращать -1. По умолчанию is.read() возвращает int, но можно на лету переделать тип в char, как в примере выше (char)by.read().

Обычно, если нужно просто считать ресурс в строку, то используют StringBuffer, а потом из него берут строку. Код выглядит примерно так:

PHP код:

StringBuffer s=new StringBuffer();
int b;
String str;
InputStream is=getClass().getResourceAsStream("/data.txt");
while((
b=is.read())!=-1s.append((char)b);
is.close();
str=s.toString(); 

Текст считывается и приводится к юникоду самой джавой и все символы будут имеют вид ASCII, то есть русские буквы не будут выглядеть русскими. Для этого нужно перекодировать самому. Тут на форуме эта тема обсуждалась несколько раз.


Часовой пояс GMT +4, время: 10:11.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot