创建OutputStream时如何避免类型不兼容错误?
解决 incompatible types: java.lang.String cannot be converted to java.io.OutputStream 错误
错误原因
你代码里的new OutputStreamWriter(fileName)是问题根源:OutputStreamWriter的构造方法必须接收java.io.OutputStream类型的对象,但你传入了字符串格式的文件名,这就触发了类型不兼容的报错。
修正方案
使用Codename1提供的FileSystemStorage.openOutputStream()方法,传入文件名获取对应的输出流,再把这个流传给OutputStreamWriter即可。同时顺带修正代码里的一些小问题:
- 移除重复的导入语句(比如重复导入
java.io.Writer) - 给
ArrayList指定泛型类型,避免未检查的警告
修正后的完整代码
import static com.codename1.ui.CN.*; import com.codename1.components.ScaleImageLabel; import com.codename1.system.Lifecycle; import com.codename1.ui.*; import com.codename1.ui.layouts.*; import com.codename1.io.*; import com.codename1.ui.plaf.*; import com.codename1.ui.util.Resources; import org.w3c.dom.Text; import java.io.IOException; import java.io.Writer; import java.io.OutputStreamWriter; import java.io.InputStream; import com.codename1.util.StringUtil; import java.util.ArrayList; import java.io.StringWriter; public class Plays { Form plays = new Form(new FlowLayout()); // 指定泛型类型,可根据实际存储对象调整 ArrayList<String> playList = new ArrayList<>(); FileSystemStorage fs = FileSystemStorage.getInstance(); public Plays() throws IOException { try { InputStream fis = fs.openInputStream("plays.txt"); // 此处建议补充读取流内容到playList的逻辑,当前仅打开了输入流 } catch (Exception ex) { Log.e(ex); Dialog.show("Touchline Assitant", "I cannot find the Plays List!", "OK", null); } String fileName = fs.getAppHomePath() + "plays.txt"; // 先打开输出流,再传入OutputStreamWriter try(OutputStream os = fs.openOutputStream(fileName); Writer w = new OutputStreamWriter(os)) { w.write("Play List"); } plays.show(); } }
额外提示
- 输入流打开后记得补充读取或关闭逻辑,避免资源浪费
- 你使用的try-with-resources语法能自动关闭流,可有效避免资源泄漏,这点做得很好
内容的提问来源于stack exchange,提问作者curtjacobs1
相关产品推荐
相关产品推荐

