Java 无法使用OpenCSV写入文件

Java 无法使用OpenCSV写入文件,java,android,opencsv,Java,Android,Opencsv,我正试图将一个文件写入目录。我在due to RxBleClient中使用了一个RxJava,它将搜索蓝牙低能耗客户端的结果返回到ArrayList中。然后,我需要创建并打开一个具有自定义名称的文件,以将结果保存到其中。 我在安卓文档上搜索,检查是否授予了所有权限,并编写了一些代码来确保这一点——所有权限都已授予。我不知道如何解决这个问题。下面是代码、堆栈跟踪和清单文件 private void scanBleDevicesDelay(int howManyRows,字符串文件名){ scanD

我正试图将一个文件写入目录。我在due to RxBleClient中使用了一个RxJava,它将搜索蓝牙低能耗客户端的结果返回到ArrayList中。然后,我需要创建并打开一个具有自定义名称的文件,以将结果保存到其中。 我在安卓文档上搜索,检查是否授予了所有权限,并编写了一些代码来确保这一点——所有权限都已授予。我不知道如何解决这个问题。下面是代码、堆栈跟踪和清单文件

private void scanBleDevicesDelay(int howManyRows,字符串文件名){
scanDisposable=rxBleClient.scanBleDevices(
新建ScanSettings.Builder()
.setScanMode(ScanSettings.SCAN\u MODE\u LOW\u LATENCY)//根据需要进行更改
.setCallbackType(ScanSettings.CALLBACK\u TYPE\u ALL\u MATCHES)//根据需要进行更改
.build(),
新建ScanFilter.Builder()
.build())
.doFinally(()->{
处置();
toggleScanBleButton.setEnabled(真);
dumpToFileButton.setEnabled(真);
})
.订阅(
扫描结果->{
//我并不为此感到骄傲:-(
//在这里处理扫描结果。
RecycleViewLeadApter.addScanResult(scanResult);
scanResultsCSV.add(扫描结果);
if(scanResultsCSV.size()=howManyRows){
//CSV文件编写器
试一试{
if(ContextCompat.checkSelfPermission(
getApplicationContext(),Manifest.permission.WRITE\u外部存储)==
PackageManager.权限(已授予){
//您可以使用需要该权限的API。
//绩效(…);
文件路径文件=新文件(Environment.getExternalStorageDirectory()
.getAbsolutePath()
+文件分隔符
+“csvData”);
如果(!pathfile.isDirectory()){
//~~~~~~~~~~~~~~~~~~~~~未创建目录~~~~~~~~~~~~~~~~~~
pathfile.mkdir();
}
文件文件=新文件(路径文件,
File.separator+文件名+“.csv”);
如果(!file.exists()){
//~~~~~~~~~~~~~~~~~~~~~未创建文件~~~~~~~~~~~~~~~~~~
//~~~~~~~~~~~~~~~~~~~~~~~这里抛出IOException~~~~~~~~~~~~~~~~~~
createNewFile();
//Files.createFile(file.toPath());
Log.i(“创建的文件:”,File.getName());
}
CSVWriter writer=新CSVWriter(新文件编写器(文件));
//CSVWriter writer=new CSVWriter(新文件编写器(pathfile+File.separator+filename+“.csv”);
scanResultsCSV.forEach(扫描->{
String[]entries=String.format(“%s,%s,%s”,scan.getTimestampNanos(),scan.getBleDevice(),scan.getRssi()).split(,”;
Log.i(“条目”,数组.toString(条目));
writer.writeNext(条目);
});
writer.close();
Toast.makeText(这个“Zapisano do pliku”,Toast.LENGTH_SHORT.show();
}else if(shouldShowRequestPermissionRegulation(“失败”)){
//在教育用户界面中,向用户解释为什么您的应用程序需要此功能
//特定功能按预期运行的权限。在此UI中,
//包括一个“取消”或“不感谢”按钮,允许用户
//在未授予权限的情况下继续使用你的应用。
//showintextui(…);
Toast.makeText(这个“Nie przyznano dostępu”,Toast.LENGTHęu SHORT).show();
}否则{
//请求许可
ActivityCompat.requestPermissions(此,新字符串[]){
Manifest.permission.WRITE\u EXTERNAL\u STORAGE},3);
}
}捕获(IOException IOException){
ioException.printStackTrace();
Toast.makeText(这是“Plik istnieje!”,Toast.LENGTH_SHORT.show();
}捕获(例外e){
e、 printStackTrace();
Toast.makeText(这是“Nieoczekiwany blad”,Toast.LENGTH_SHORT).show();
}最后{
//Toast.makeText(这是“Zakonczono过程”,Toast.LENGTH_SHORT.show();
scanDisposable.dispose();
}
}
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
W/System.err: java.io.IOException: No such file or directory
        at java.io.UnixFileSystem.createFileExclusively0(Native Method)
        at java.io.UnixFileSystem.createFileExclusively(UnixFileSystem.java:317)
W/System.err:     at java.io.File.createNewFile(File.java:1008)
        at com.example.ble_rssi_plotter.MainActivity.lambda$scanBleDevicesDelay$4$MainActivity(MainActivity.java:291)
W/System.err:     at com.example.ble_rssi_plotter.-$$Lambda$MainActivity$k9iEru6y1TGq9ZgTipfCtV0GZ18.accept(Unknown Source:8)
        at io.reactivex.internal.observers.LambdaObserver.onNext(LambdaObserver.java:63)
W/System.err:     at io.reactivex.internal.operators.observable.ObservableDoFinally$DoFinallyObserver.onNext(ObservableDoFinally.java:80)
        at io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.tryEmit(ObservableFlatMap.java:265)
        at io.reactivex.internal.operators.observable.ObservableFlatMap$InnerObserver.onNext(ObservableFlatMap.java:562)
        at io.reactivex.internal.operators.observable.ObservableDoOnEach$DoOnEachObserver.onNext(ObservableDoOnEach.java:101)
W/System.err:     at io.reactivex.internal.operators.observable.ObservableMap$MapObserver.onNext(ObservableMap.java:62)
        at io.reactivex.internal.operators.observable.ObservableUnsubscribeOn$UnsubscribeObserver.onNext(ObservableUnsubscribeOn.java:60)
        at io.reactivex.internal.operators.observable.ObservableCreate$CreateEmitter.onNext(ObservableCreate.java:66)
W/System.err:     at com.polidea.rxandroidble2.internal.serialization.FIFORunnableEntry$1$1.onNext(FIFORunnableEntry.java:68)
        at io.reactivex.internal.operators.observable.ObservableUnsubscribeOn$UnsubscribeObserver.onNext(ObservableUnsubscribeOn.java:60)
        at io.reactivex.internal.operators.observable.ObservableCreate$CreateEmitter.onNext(ObservableCreate.java:66)
W/System.err:     at com.polidea.rxandroidble2.internal.operations.ScanOperationApi21$1.onScanResult(ScanOperationApi21.java:77)
        at android.bluetooth.le.BluetoothLeScanner$BleScanCallbackWrapper$1.run(BluetoothLeScanner.java:492)
        at android.os.Handler.handleCallback(Handler.java:938)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:223)
W/System.err:     at android.app.ActivityThread.main(ActivityThread.java:7656)
W/System.err:     at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
W/System.err:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)