我正在开发一个必须解析文件中文本的Android应用程序。
我的Parser.java类中有以下方法:
$("#atualiza").click(function () {
$(document).ajaxStart(function () {
$("#carregando").show();
});
$(document).ajaxStop(function () {
$("#carregando").hide();
});
$.ajax({
url: '/Portaria/AtendOperador',
dataType: "json",
type: "GET",
data: { 'data1': data1, 'data2': data2, 'evento': evento, 'cuc': cuc, 'conta': conta },
//async: false, COMMENTED!!!
success: function (data) {
var Categories = new Array();
var Series = new Array();
for (var i in data) {
Categories.push(data[i].Operador);
Series.push(data[i].Fechados);
}
var CategArray = JSON.parse(JSON.stringify(Categories));
atendOperador(CategArray, Series);
},
error: function (xhr) {
alert('error');
}
});
});
每当在while循环中调用buffer.readLine()方法时,我都会遇到问题。
我传入以下路径信息,File对象是:
private String getText(String fileName) {
BufferedReader buffer = null;
File file = new File(fileName);
try{
buffer = new BufferedReader( new FileReader(file));
}
catch (FileNotFoundException e){
System.out.println("Could not find file" + fileName);
}
String everything = null;
try{
StringBuilder builder = new StringBuilder();
String line = null;
while ((line = buffer.readLine()) != null){
builder.append(line);
builder.append(System.lineSeparator());
line = buffer.readLine();
}
everything = builder.toString();
//buffer.close();
}
catch (IOException e) {
e.printStackTrace();
return null;
}
finally {
if ((buffer != null)) {
try {
buffer.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
return everything;
}
现在我已经查看了堆栈和在线上的大量帖子,以便尝试解决这个问题,并尝试使用this和this中的一些解决方案,但没有运气。这是我得到的错误堆栈跟踪的片段。
"/Users/aa/Desktop/parser.txt"
我确信文件的路径是正确的,因为我在调试时检查了它。我不确定我还应该在这里考虑什么。
编辑:我正在开发OS X而不是Windows或Linux答案 0 :(得分:1)
您似乎正在尝试将本地(可能是Windows)文件路径传递到您的设备或模拟器。
"/Users/aa/Desktop/parser.txt"
这不起作用。您必须在Android项目中拥有该文件。您可以将它放在您的资源文件夹中并像这样访问它:
AssetManager manager = context.getAssets();
InputStream input = manager.open("parser.txt");
或者您可以将它放在原始文件夹中并像这样访问它:
InputStream input = context.getResources().openRawResource(R.raw.parser);
您在BufferedReader上获取null的原因是系统无法在Android项目中找到该文件路径。然后,正如评论中指出的那样,您没有正确处理异常并继续尝试读取流。
答案 1 :(得分:0)
有几件事:
@Directive({selector: 'myComponent'})
export class MyComponent {
content:string;
constructor(private _elRef: ElementRef) {}
ngAfterContentChecked() {
this.content = this._elRef.nativeElement.textContent;
// or maybe innerHTML, depending on what you want
console.log('new value:', this.content);
}
}
@Component({
selector: 'my-app',
template: `<myComponent>{{number}}</myComponent>
<button (click)="number = number + 1">increment</button>
<button (click)="0">do nothing event</button>
<br>look at console log for directive binding updates`,
directives: [MyComponent]
})
export class AppComponent {
number = 123;
constructor() { console.clear(); }
}
您需要删除注释行,因为您正在调用readLine两次。当您确实正确初始化缓冲区时,您将跳过行。
为了防止空指针异常,你应该:
while ((line = buffer.readLine()) != null){
builder.append(line);
builder.append(System.lineSeparator());
line = buffer.readLine(); //remove this line
}