2010-03-07 5 views
0

У меня есть следующий код:J2ME java.io.IOException ошибка

import javax.microedition.midlet.*; 
import javax.microedition.lcdui.*; 
import java.io.*; 
import javax.microedition.io.*; 

public class FileConnection extends MIDlet implements CommandListener, Runnable { 
    private Command exit, start; 
    private Display display; 
    private Form form; 
    public FileConnection() 
    { 
    display = Display.getDisplay(this); 
    exit = new Command("Exit", Command.EXIT, 1); 
    start = new Command("Start", Command.EXIT, 1); 
    form = new Form("Write To File"); 
    form.addCommand(exit); 
    form.addCommand(start); 
    form.setCommandListener(this); 
    } 
    public void startApp() throws MIDletStateChangeException 
    { 
    display.setCurrent(form); 
    } 

    public void run(){ 
     try{ 
      javax.microedition.io.file.FileConnection filecon = 
      (javax.microedition.io.file.FileConnection) 
      Connector.open("file:///root1/photos/fisier.txt", Connector.WRITE); 
    OutputStream out = filecon.openOutputStream(); 
    PrintStream output = new PrintStream(out); 
    output.println("This is a test."); 
    out.close(); 
    filecon.close(); 
    Alert alert = new Alert("Completed", "Data Written", null, null); 
    alert.setTimeout(Alert.FOREVER); 
    alert.setType(AlertType.ERROR); 
    display.setCurrent(alert); 
     } 
     catch(ConnectionNotFoundException error) 
     { 
     Alert alert = new Alert(
      "Error", "Cannot access file.", null, null); 
     alert.setTimeout(Alert.FOREVER); 
     alert.setType(AlertType.ERROR); 
     display.setCurrent(alert);  
     } 
     catch(IOException error) 
     { 
     Alert alert = new Alert("Error", error.toString(), null, null); 
     alert.setTimeout(Alert.FOREVER); 
     alert.setType(AlertType.ERROR); 
     display.setCurrent(alert);  
     } 
    } 

    public void pauseApp() 
    { 
    } 
    public void destroyApp(boolean unconditional) 
    { 
    } 
    public void commandAction(Command command, Displayable displayable) 
    { 
    if (command == exit) 
    { 
     destroyApp(false); 
     notifyDestroyed(); 
    } 
    else if (command == start) 
    { 
     new Thread(this).start(); 

    } 
    } 
} 

Как вы можете видеть, я пытаюсь написать что-то в текстовом файле, с эмулятором. Я запускаю этот код в отдельном потоке, чтобы избежать этого предупреждения во время выполнения. У меня есть в C: \ Program Files \ WTK2.5.2_01 \ j2mewtk_template \ appdb \ DefaultColorPhone \ filesystem \ root1 \ photos файл с именем fisier.txt. Когда я пытаюсь запустить этот код и нажимаю «Старт», я нажимаю «Да» на вопрос «J2ME ... Midlet Suite хочет записать локальную файловую систему. Можно ли обновить файлы? ДА НЕТ'. И я попал на экран java.io.IOException:, и ничего более! ..

Что случилось? Почему я получил эту ошибку? Я нигде не нашел рабочий код, как писать в локальный файл .txt.
Не знаете, что случилось в моем коде?

+0

Когда вы поймаете исключение, позвоните Throwable.printStackTrace(), чтобы убедиться, что знаете, какой метод на самом деле его выбрасывает. Используйте Connector.READ_WRITE. Убедитесь, что ваша политика безопасности эмулятора обеспечивает полный доступ к файловой системе при запуске неподписанного мидлета (который я предполагаю, что вы есть). Сначала закройте PrintStream. обновите свой вопрос с результатами. –

ответ

1

Возможно, что-либо из-за неправильного пути (и файла не существует), к которому у вас нет доступа на запись, чтобы он был открыт в другом месте.

Вы пробовали вызов некоторых методов в FileConnection классе предложений, такие как canWrite(), exists() и isOpen(), чтобы увидеть, если некоторые из этих общих проблем применить в вашем случае?

+0

Я пробовал: общественной недействительным пробег() { \t попробовать { \t \t javax.microedition.io.file.FileConnection filecon = (javax.microedition.io.file.FileConnection) \t \t Connector.open ("файл : ///root1/photos/fisier.txt ", Connector.READ_WRITE); \t \t System.out.println (filecon.exists()); и я получил «ложь». Но этот файл существует! (и он пуст). Почему я там фальшивый? – qwerty

+0

Почему путь не верный? Как мне переписать путь? – qwerty

+0

Я понятия не имею, где ваш эмулятор сохраняет ваши файлы. Попробуйте создать файл с помощью filecon.create(), а затем выполните поиск в своей файловой системе, чтобы увидеть, где был помещен файл. – funkybro

Смежные вопросы