final File parentDir = new File("S:\\PDSPopulatingProgram");
parentDir.mkdir();
final String hash = "popupateData";
final String fileName = hash + ".txt";
final File file = new File(parentDir, fileName);
file.createNewFile(); // Creates file PDSPopulatingProgram/popupateData.txt
我正在尝试在文件夹中创建一个文件,但我得到例外
java.security.AccessControlException: Access denied
我在Windows环境中工作。我可以从Windows资源管理器创建一个文件夹,但不能从Java代码创建。
如何解决此问题?
答案 0 :(得分:18)
在<jre location>\lib\security\java.policy
尝试添加:
grant {
permission java.security.AllPermission;
};
看看它是否允许你。如果是这样,您将必须添加更多细化权限。
请参阅:
Java 8 Documentation for java.policy files
和
http://java.sun.com/developer/onlineTraining/Programming/JDCBook/appA.html
答案 1 :(得分:10)
虽然不建议这样做,但是如果您真的想让您的Web应用程序访问其部署目录之外的文件夹。您需要在java.policy
文件中添加以下权限(路径与Petey B的回复相同)
permission java.io.FilePermission "your folder path", "write"
在你的情况下,它将是
permission java.io.FilePermission "S:/PDSPopulatingProgram/-", "write"
此处/-
表示此文件夹中的所有文件或子文件夹。
警告:但通过这样做,您将招致一些安全风险。
答案 2 :(得分:0)
只需在此处记录
在Windows上,您需要转义
字符:import { Component} from '@angular/core';
import { SpeechRecognition } from '@ionic-native/speech-recognition/ngx';
@Component({
selector: 'app-tab1',
templateUrl: 'tab1.page.html',
styleUrls: ['tab1.page.scss']
})
export class Tab1Page {
message: string;
textoBuscar = '';
arrayProductos = [];
constructor(private speechRecognition: SpeechRecognition) {
this.getArrayFotos();
this.startRecognition();
}
ionViewDidLoad() {
this.getPermission();
}
// Esta función es la encargada de activar el reconocimiento de voz
startListening() {
const options = {
language: 'es-ES', // fijamos el lenguage
matches: 1, // Nos devuelve la primera opción de lo que ha escuchado
// si ponemos otra cantidad, nos dará una variante de la palabra/frase que le hemos dicho
};
this.speechRecognition.startListening(options).subscribe(matches => {
this.message = matches[0]; // Guarda la primera frase que ha interpretado en nuestra variable
console.log(this.message);
});
}
getPermission() {
// comprueba que la aplicación tiene permiso, de no ser así nos la pide
this.speechRecognition.hasPermission().
then((hasPermission: boolean) => {
if (!hasPermission) {
this.speechRecognition.requestPermission();
}
});
}
getArrayFotos() {
this.arrayProductos = [
{
nombre: 'Polera polo xl',
precio: 3000,
cantidad: 20,
foto: 'https://www.brooksbrothers.cl/pub/media/catalog/product/cache/image/e9c3970ab036de70892d86c6d221abfe/b/1/b100076744_bb42_1.jpg'
},
{
nombre: 'Polera adidas',
precio: 2000,
cantidad: 10,
// tslint:disable-next-line:max-line-length
foto: 'https://assets.adidas.com/images/w_840,h_840,f_auto,q_auto:sensitive,fl_lossy/68ad41ef8bb84fe1b96aaac001746ff7_9366/Polera_Polo_Designed_2_Move_3_Franjas_Blanco_FL0322_01_laydown.jpg'
}];
}
startListen() {
this.speechRecognition.startListening()
.subscribe(matches => {
const matchof: string = matches[0].toString();
this.textoBuscar = matchof;
this.arrayProductos = this.arrayProductos.filter((producto) => {
return producto.nombre.toLowerCase().indexOf(this.textoBuscar.toLowerCase()) > -1;
});
});
}
startRecognition() {
this.speechRecognition.hasPermission()
.then((hasPermission: boolean) => {
if (hasPermission) {
this.speechRecognition.requestPermission()
.then(
() => console.log('Tienes permiso'),
() => console.log('No tienes permiso del microfono'));
}});
}
// buscar(event?, buscar: string = '') {
// if (buscar.length > 0) {
// this.textoBuscar = buscar;
// }
// if (event !== undefined) {
// this.textoBuscar = event.detail.value;
// }
// }
getItems(ev) {
const val = ev.target.value;
if (val && val.trim() !== '') {
this.arrayProductos = this.arrayProductos.filter((producto) => {
return producto.nombre.toLowerCase().indexOf(this.textoBuscar.toLowerCase()) > -1;
});
} else {
this.getArrayFotos();
}}
active() {
console.log('active');
}
stop() {
this.speechRecognition.stopListening();
console.log('Finished recording');
}
getPermisson() {
// Check feature available
this.speechRecognition.hasPermission()
.then((hasPermission: boolean) => {
if (!hasPermission) {
this.speechRecognition.requestPermission()
.then(
() => console.log('Granted'),
() => console.log('Denied')
);
}
});
}
start() {
const options = {
language: 'es-ES'
};
this.speechRecognition.startListening(options)
.subscribe(
(matches: Array<string>) => {
console.log(matches);
this.textoBuscar = matches[0].toString();
this.arrayProductos = this.arrayProductos.filter((producto) => {
return producto.nombre.toLowerCase().indexOf(this.textoBuscar.toLowerCase()) > -1;
});
},
(onerror) => this.stop(),
); }
}
import { Component} from '@angular/core';
import { SpeechRecognition } from '@ionic-native/speech-recognition/ngx';
@Component({
selector: 'app-tab1',
templateUrl: 'tab1.page.html',
styleUrls: ['tab1.page.scss']
})
export class Tab1Page {
message: string;
textoBuscar = '';
arrayProductos = [];
constructor(private speechRecognition: SpeechRecognition) {
this.getArrayFotos();
this.startRecognition();
}
ionViewDidLoad() {
this.getPermission();
}
// Esta función es la encargada de activar el reconocimiento de voz
startListening() {
const options = {
language: 'es-ES', // fijamos el lenguage
matches: 1, // Nos devuelve la primera opción de lo que ha escuchado
// si ponemos otra cantidad, nos dará una variante de la palabra/frase que le hemos dicho
};
this.speechRecognition.startListening(options).subscribe(matches => {
this.message = matches[0]; // Guarda la primera frase que ha interpretado en nuestra variable
console.log(this.message);
});
}
getPermission() {
// comprueba que la aplicación tiene permiso, de no ser así nos la pide
this.speechRecognition.hasPermission().
then((hasPermission: boolean) => {
if (!hasPermission) {
this.speechRecognition.requestPermission();
}
});
}
getArrayFotos() {
this.arrayProductos = [
{
nombre: 'Polera polo xl',
precio: 3000,
cantidad: 20,
foto: 'https://www.brooksbrothers.cl/pub/media/catalog/product/cache/image/e9c3970ab036de70892d86c6d221abfe/b/1/b100076744_bb42_1.jpg'
},
{
nombre: 'Polera adidas',
precio: 2000,
cantidad: 10,
// tslint:disable-next-line:max-line-length
foto: 'https://assets.adidas.com/images/w_840,h_840,f_auto,q_auto:sensitive,fl_lossy/68ad41ef8bb84fe1b96aaac001746ff7_9366/Polera_Polo_Designed_2_Move_3_Franjas_Blanco_FL0322_01_laydown.jpg'
}];
}
startListen() {
this.speechRecognition.startListening()
.subscribe(matches => {
const matchof: string = matches[0].toString();
this.textoBuscar = matchof;
this.arrayProductos = this.arrayProductos.filter((producto) => {
return producto.nombre.toLowerCase().indexOf(this.textoBuscar.toLowerCase()) > -1;
});
});
}
startRecognition() {
this.speechRecognition.hasPermission()
.then((hasPermission: boolean) => {
if (hasPermission) {
this.speechRecognition.requestPermission()
.then(
() => console.log('Tienes permiso'),
() => console.log('No tienes permiso del microfono'));
}});
}
// buscar(event?, buscar: string = '') {
// if (buscar.length > 0) {
// this.textoBuscar = buscar;
// }
// if (event !== undefined) {
// this.textoBuscar = event.detail.value;
// }
// }
getItems(ev) {
const val = ev.target.value;
if (val && val.trim() !== '') {
this.arrayProductos = this.arrayProductos.filter((producto) => {
return producto.nombre.toLowerCase().indexOf(this.textoBuscar.toLowerCase()) > -1;
});
} else {
this.getArrayFotos();
}}
active() {
console.log('active');
}
stop() {
this.speechRecognition.stopListening();
console.log('Finished recording');
}
getPermisson() {
// Check feature available
this.speechRecognition.hasPermission()
.then((hasPermission: boolean) => {
if (!hasPermission) {
this.speechRecognition.requestPermission()
.then(
() => console.log('Granted'),
() => console.log('Denied')
);
}
});
}
start() {
const options = {
language: 'es-ES'
};
this.speechRecognition.startListening(options)
.subscribe(
(matches: Array<string>) => {
console.log(matches);
this.textoBuscar = matches[0].toString();
this.arrayProductos = this.arrayProductos.filter((producto) => {
return producto.nombre.toLowerCase().indexOf(this.textoBuscar.toLowerCase()) > -1;
});
},
(onerror) => this.stop(),
); }
}